Роутер Foxx просто не работает

В настоящее время я пытаюсь перенести свой код с ArangoDB v2.8 на v3.0.1, и я застрял с маршрутами. У меня есть простой маршрут, например:

const router = require('@arangodb/foxx/router')()

router.get('/hello', function (req, res) {
  res.json({ hi: 'world' })
})

и мой БАЗОВЫЙ URL-адрес:

и конечно мой роутер прописан в manifest.json как "main": "index.js",

но когда я пытаюсь получить к нему доступ через /_db/ilearn/api/hello, я получаю 404 "unknown path '/api/hello'".

Я пытался изменить URL всеми возможными способами, ничего не помогает. Что я здесь делаю неправильно?

Спасибо


person artnikpro    schedule 07.07.2016    source источник


Ответы (1)


В отличие от контроллеров, маршрутизаторы не монтируются автоматически. Это позволяет передавать их как экспорт и вкладывать их произвольно. «Основной» файл также не регистрирует маршрутизаторы (как файлы «контроллеры» для контроллеров), а просто указывает точку входа вашего сервиса.

Чтобы смонтировать маршрутизатор, вам нужно использовать функцию module.context.use. Вы можете подключить маршрутизатор к точке подключения службы напрямую, опустив путь и просто передав маршрутизатор: module.context.use(router).

Если вы его еще не видели, я бы также рекомендовал ознакомиться с Руководством по миграции, в котором описаны другие «подводные камни», с которыми вы можете столкнуться при переходе с версии 2.x на версию 3.0: https://docs.arangodb.com

Эта проблема, в частности, описана в главе о переносе контроллеров: https://docs.arangodb.com/3.0/Manual/Foxx/Migrating2x/Controllers/index.html

person Alan Plum    schedule 08.07.2016
comment
Ты прав! Думаю, я просто пропустил этот Routers need to be explicitly mounted using the module.context.use method. из руководства по миграции. Было бы здорово, если бы это также было помещено в пример здесь docs.arangodb.com/3.0/Manual/Foxx/Migrating2x/Controllers/ . Благодаря тонну! - person artnikpro; 08.07.2016
comment
@artnikpro Это было в исходном черновике, но наши тестеры сочли его запутанным, потому что руководство по миграции начинается с замены раздела контроллеров в манифесте основным файлом, который требует и монтирует маршрутизаторы, поэтому, если вы объедините оба примера, вы получите устанавливая их дважды. - person Alan Plum; 08.07.2016