使用Express和Nodejs进行路由时出现404错误
我已经创build了一个基本的节点/快速应用程序,并试图实现基于不同文件中的逻辑分离的路线。
在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-找不到。
有没有人有build议在Express应用程序中实现模块化路由的最佳方式?
是否有可能在一个单一的实例express.Router()加载多个路由?
– – – – – – 编辑 – – – – – – – –
进一步testing
我已经能够debuggingexpress.Router()本地实例,并且本地“路由器”variables中的路由层堆栈正在使用来自各个模块的路由进行更新。
最后一行:
app.use('/api', router);
也正在成功更新全局应用程序实例内部app.router对象,并使用传递给它的本地路由器实例的正确路由层。
我认为这个问题是路由层堆栈中的路由为13-14,所以还有一些其他中间件路由不能让路由通过到最后。我只是需要跟踪这个我猜。
这里有两个问题:
(1)看起来像router.route().all
没有返回结果,或调用层中的next()
路线。
这里也有一篇文章。 https://groups.google.com/forum/#!topic/express-js/zk_KCgCFxLc
如果删除.all或在.all
函数中插入next()
,路由将正常工作。
(2)路由定义中的尾部'/'
引起另一个错误,即router.route('/users/')
应该是router.route('/users')
斜杠很重要。
尝试以下方法,
Server.js
app.use('/users' , require('app/routes/users')); app.use('/events' , require('app/routes/events')); app.use('/subscribe' , require('app/routes/subscribe'));
在你的应用程序/路线/ 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;