shcoderAlex
@shcoderAlex

[nodejs] fibrous конфликт с демкой madhums(express)

Добрый день.

С недавнего времени занимаюсь разработкой использую nodejs, совсем зелёный…

Недавно наткнулся на хороший модуль fibrous, который позволяет писать синхронный код, но попытка прикрутить его к проекту не увенчалась успехом. Проект основан на демке madhums "node-express-mongoose-demo"
Прогуглил гугл, особо ничего не нашёл, что может помочь…
По этому решил обратиться за помощью к более опытному хабр-сообществу.

Для теста повторил свою ошибку на чистом демо и вылил в гит

Подключил fibrous в config/express — 11 и 49 строка.
Создал контроллер demo и прописал роутинг с корня к нему.

Сама ошибка
Error: Can't wait without a fiber
    at Function.wait (/home/user/www/project/node_modules/fibrous/node_modules/fibers/future.js:83:9)
    at Object.Future.wait (/home/user/www/project/node_modules/fibrous/node_modules/fibers/future.js:325:10)
    at Object.<anonymous> (/home/user/www/project/node_modules/fibrous/lib/fibrous.js:62:47)
    at Object.readFile (/home/user/www/project/node_modules/fibrous/lib/fibrous.js:97:47)
    at exports.fab (/home/user/www/project/app/controllers/demo.js:15:17)
    at callbacks (/home/user/www/project/node_modules/express/lib/router/index.js:161:37)
    at param (/home/user/www/project/node_modules/express/lib/router/index.js:135:11)
    at pass (/home/user/www/project/node_modules/express/lib/router/index.js:142:5)
    at Router._dispatch (/home/user/www/project/node_modules/express/lib/router/index.js:170:5)
    at Object.router (/home/user/www/project/node_modules/express/lib/router/index.js:33:10)

  • Вопрос задан
  • 2807 просмотров
Пригласить эксперта
Ответы на вопрос 3
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Интересная библиотечка, стоит исследовать. К сожалению, я не использую экспресс, и не могу ответить квалифицировано, но подобная проблема возникала у людей github.com/goodeggs/fibrous/issues/10 Очевидно, что экспресс (или его плагины доступа к данным) портят структуры данных, которые создает fibrous, когда привязывается к вызову методов. Методы вешаются в очередь fibrous и когда настает время их исполнять и вернуть управление в нужное место, то оказывается, что данных нет. По хорошему, конечно, fibrous не должен навешивать данные на объекты, которые сам не создает, а должен у себя делать внутренние структуры данных и индексы для вызываемых методов. Ну это нужно изучать и переписывать библиотеку.
Ответ написан
Комментировать
pomeo
@pomeo
Попробуйте сначала на голом express, в демо слишком много всего понапихано и из-за чего ошибка возникает тяжело отследить.
Ответ написан
@bsdemon
Добавьте fibrous.middleware в Express приложение. Вы не можете использовать fibrous методы пока не находитесь в Fiber, как раз этот middleware и оборачивает код express в Fiber.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы