我已经创建了一个基本的Node / Express App,并尝试根据不同文件中的逻辑分离来实现路由。
在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()本地实例,以及本地"路由器"中的路由层堆栈。变量正在使用来自各个模块的路径进行更新。
最后一行:
app.use('/api', router);
还成功更新了全局应用实例内部app.router对象,并使用传递给它的本地路由器实例中的正确路由层。
我认为问题在于' / api'路由层堆栈中的数字是13-14,因此堆栈中存在一些问题,其中一些其他中间件路由不允许路由到达终点...我只需要跟踪这个问题。
答案 0 :(得分:2)
这里有两个问题:
(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')
斜线很重要。
答案 1 :(得分:0)
尝试以下方式,
Server.js
app.use('/users' , require('app/routes/users'));
app.use('/events' , require('app/routes/events'));
app.use('/subscribe' , require('app/routes/subscribe'));
在你的app / routes / users.js
中var router = express.Router();
router.get('/', function (req, res, next) {
//code here
})
router.get('/:id', function (req, res, next) {
//code here
})
module.exports = router;