Node.js / Express получить добавление маршрута декларативно
Я пытаюсь управлять своими маршрутами в декларативных объектах, а затем инициализировать / зарегистрировать обработчики конечных точек, используя один или несколько объектов.
К сожалению, когда я пытаюсь зарегистрировать обработчики в цикле декларативных маршрутов, методов и обработчиков, кажется, что маршруты не регистрируются в Express и приводят к 404, когда я пытаюсь получить доступ к маршрутам.
Вот фрагмент кода:
const services = require('./services.js');
const appRoutes = [
{ route: '/x/user', handler: { get: services.getUserName, post: services.getUserName } },
{ route: '/x/ping', handler: { get: services.ping } },
{ route: '/x/mary/had/:foo/little/:animal', handler: { get: (req, res) => res.send({ foo: req.params.foo, animal: req.params.animal }) } }
];
class routes {
static registerRoutes(app, rs) {
rs.forEach(r => {
const rt = r.route;
const h = r.handler;
console.log('registerRoutes.routes.forEach: ' + rt + '; hs: ' + h.get);
if (h.get) app.get(rt, h.get);
if (h.post) app.post(rt, h.post);
if (h.delete) app.delete(rt, h.delete);
if (h.head) app.head(rt, h.head);
if (h.put) app.put(rt, h.put);
});
}
static initializeRoutes(app) {
this.initializeDevRoutes(app);
}
static initializeDevRoutes(app) {
const rs = [
{ route: '/z/user', handler: { get: services.getUserName, post: services.getUserName } },
{ route: '/z/ping', handler: { get: (req, res) => res.send('pinged') } }
];
this.registerRoutes(app, appRoutes);
this.registerRoutes(app, rs);
app.get('/api/getUsername', services.getUserName); // (req, res) => res.send({ username: os.userInfo().username }));
app.get('/api/ping', services.ping); // (req, res) => res.send({ ping: new Date() }));
app.get('/api/mary/had/:foo/little/:animal', (req, res) => res.send({ food: req.params.foo, animal: req.params.animal }));
}
}
module.exports = routes;
/x/...
или же /z/...
маршруты не были успешно зарегистрированы, так как я получаю 404 для всех этих маршрутов.
Тем не менее, для явных звонков app.get('/api/....)
внизу правильно регистрируйте маршруты, так как возвращаются ожидаемые 200 результатов статуса.
Это мой первый проект node/js, поэтому я могу что-то упустить из-за того, как JS определяет и обрабатывает замыкания.
Любая помощь / предложения приветствуется.
Благодарю.
1 ответ
Проблема заключалась в том, что я запустил сервер dev, используя: npm run dev
,
Браузер автоматически открывается для сервера dev (работает на порту 3000), который проксируется только для /api
к фактическому серверу (работает на порту 8080) (внутри webpack.config.js
файл под devServer
). Маршруты работают должным образом при подключении к фактическому серверу, работающему на порту 8080.