Если вы ищете основу для API или любого другого приложения которое основано на HTTP протоколе, либо вас не устраивают инструменты которыми вы сейчас пользуетесь, то вы можете обратить свое внимание на этот микро (скорее даже нано) каркас, который абсолютно никак не связывает вам руки при разработке и он «не такой как все».

> Github проекта
> Готовый пример с базовой архитектурой приложения
> NPM

Особенности:

  • Полный контроль над происходящим
  • Роутинг к которому вы скорее всего не привыкли разрабатывая на ноде
  • Async/await friendly
  • 0 зависимостей
  • Быстрый
  • Гибкий
  • Легковесный

Особого смысла расписывать что и как я не вижу, т.к документация с примерами кода, плюс есть простой пример приложения.

Пролистав документацию и запустив у себя пример, а так же посмотрев кода примера, вы быстро все поймете. Подойдет оно вам или нет.

Комментарии (3)


  1. x07
    22.11.2017 20:37
    +3

    жесть


  1. movl
    22.11.2017 22:40

    Код библиотеки мог бы быть значительно лучше, особенно если вы предлагаете другим людям им воспользоваться. На что обратил внимание беглым взглядом:


    ES6


    Методы объявляются в объекте, а не в прототипе, и при этом не использует никаких данных из замыкающей области видимости. Для этого в ES6 появились классы.


    function EscobarServer() {
        this.host = '0.0.0.0';
        // ...
        this.loadRoutes = (pathToFolder) => { /* ... */ }
        // ...
    }

    Async/await/promises


    В особенностях библиотеки заявлен "async/await friendly" интерфейс, хотя сама библиотека не использует возможности этих конструкций там где это более чем оправданно, из-за чего код превращается в рекурсивную лапшу из обратных вызовов:


                    files.forEach((name) => {
                        let filePath = path.join(currentDirPath, name);
                        iterations++;
                        fs.stat(filePath, (err, stat) => {
                            iterations--;
                            // ...
                        }
                        // ...
                    }

    Парсер тела запроса какой-то очень странный, особо не стал разбираться в его логике работы, но сразу увидел что функция выполняется синхронно, но при этом объявлена как асинхронная, не совсем понимаю смысл этого.


    this.parse = async function () { /* sync code */ }

    Интерфейс


    Логичнее было бы добавить возможность подписаться на события, которые не влияют на поток выполнения и также добавить интерфейс для подключения функций промежуточной обработки, вместо всех этих колбеков.


        // Callbacks
        this.onBeforeEndpoint = null;
        this.onBeforeSendResponse = null;
        // ...

    Видимо, вся эта библиотека, это попытка создать роутинг на основе структуры директорий. Наверное нужно было больше уделить внимания существующим проектам со схожей концепцией. Да даже те же самые рельсы хорошо ложатся в REST архитектуру и там тоже все по умолчанию завязано на структуре директорий, можно было позаимствовать идей от туда, да и не мало, скорей всего, существует примеров более-менее успешно реализующий данный принцип.


    В целом код и интерфейс библиотеки далек от приемлемого, по моему мнению, и стоило дважды подумать, прежде чем пытаться его толкнуть кому-то на хабре.


  1. sentyaev
    23.11.2017 01:15

    Особого смысла расписывать что и как я не вижу, т.к документация с примерами кода, плюс есть простой пример приложения.

    Если даже вы не видите смысла рассказывать про это, то как у потенциального пользователя, типа меня, появится мотивация «совершить переход» на github и разбираться что же вы такое сделали?

    Вы бы хоть рассказали что это и зачем, какие проблемы решает, сравнение с конкурентами ну и т.д.