我创建了一个基本的 Node/Express 应用程序,并尝试基于不同文件中的逻辑分离来实现路由。
在 Server.js 中
var app = express();
var router = express.Router();
require('./app/routes/users')(router);
require('./app/routes/events')(router);
require('./app/routes/subscribe')(router);
require('./app/routes/login')(router);
app.use('/api',router);
在 ./app/routes/users.js
module.exports = function(router){
router.route('/users/')
.all(function(req, res, next) {
// runs for all HTTP verbs first
// think of it as route specific middleware!
})
.get(function(req, res, next) {
res.json(req.user);
})
.put(function(req, res, next) {
// just an example of maybe updating the user
req.user.name = req.params.name;
// save user ... etc
res.json(req.user);
})
.post(function(req, res, next) {
next(new Error('not implemented'));
})
.delete(function(req, res, next) {
next(new Error('not implemented'));
})
router.route('/users/:user_id')
.all(function(req, res, next) {
// runs for all HTTP verbs first
// think of it as route specific middleware!
})
.get(function(req, res, next) {
res.json(req.user);
})
.put(function(req, res, next) {
// just an example of maybe updating the user
req.user.name = req.params.name;
// save user ... etc
res.json(req.user);
})
.post(function(req, res, next) {
next(new Error('not implemented'));
})
.delete(function(req, res, next) {
next(new Error('not implemented'));
})
}
所有路由都返回 404-Not Found。
有人对在 Express Apps 中实现模块化路由的最佳方式有建议吗?
是否可以在单个express.Router()实例中加载多个路由?
------------编辑----------------
进一步测试
我已经能够调试express.Router()本地实例,并且本地“router”变量中的路由层堆栈正在使用来自各个模块的路由进行更新。
最后一行:
app.use('/api', router);
还成功更新了全局应用程序实例内部 app.router 对象,并使用传递给它的本地路由器实例的正确路由层。
我认为问题在于“/api”的路由位于路由层堆栈中的第 13-14 号,因此堆栈上方存在一些问题,其他一些中间件路由不允许路由到达末尾...我想我只需要追踪到这一点。
最佳答案
这里有两个问题:
(1) 看起来 router.route().all
没有返回结果,或者调用了 next()
路由在图层中。
这里也有一篇文章。 https://groups.google.com/forum/#!topic/express-js/zk_KCgCFxLc
如果我删除 .all 或将 next()
插入到 .all
函数中,路由将正常工作。
(2) 路由定义中的尾随'/'
导致另一个错误
即 router.route('/users/')
应该是 router.route('/users')
斜杠很重要。
关于node.js - 使用 Express 和 Nodejs 进行路由时出现 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25904277/