使用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;