使用Express和Nodejs进行路由时出现404错误

时间:2014-09-18 04:40:52

标签: node.js express routing

我已经创建了一个基本的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,因此堆栈中存在一些问题,其中一些其他中间件路由不允许路由到达终点...我只需要跟踪这个问题。

2 个答案:

答案 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;