我试图在声明性对象中管理我的路由,然后使用一个或多个对象初始化/注册终结点处理程序。
不幸的是,当我尝试在声明性路由,方法和处理程序的循环中注册处理程序时,这些路由似乎未在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。
但是,由于返回了预期的200个状态结果,因此对于底部的app.get('/api/....)
的显式调用必须正确注册路由。
这是我的第一个node / js项目,因此我可能在JS范围和处理闭包方面缺少某些东西。
感谢任何帮助/建议。
谢谢。
答案 0 :(得分:0)
问题在于我使用npm run dev
启动了开发服务器。
浏览器自动打开到开发服务器(在端口3000上运行),该服务器仅将/api
代理到实际服务器(在端口8080上运行)(位于{{1}下的webpack.config.js
文件中) }。击中端口8080上运行的实际服务器时,路由按预期工作。