【问题标题】:404 error when Routing using Express and Nodejs使用 Express 和 Nodejs 进行路由时出现 404 错误
【发布时间】:2014-11-12 07:10:21
【问题描述】:

我已经创建了一个基本的 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() 本地实例,并且本地“路由器”变量中的路由层堆栈正在使用来自各个模块的路由进行更新。

最后一行:

app.use('/api', router);

还成功地更新了全局应用程序实例内部 app.router 对象,并使用来自本地路由器实例的正确路由层传递给它。

我认为问题在于“/api”的路由在路由层堆栈中的编号为 13-14,因此堆栈中存在一些问题,其他一些中间件路由不允许路由通过到最后...我想我只需要追踪这个。

【问题讨论】:

    标签: node.js express routing


    【解决方案1】:

    这里有两个问题:

    (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') 斜线很重要。

    【讨论】:

      【解决方案2】:

      试试下面的方法,

      服务器.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;
      

      【讨论】:

      • 我知道这会起作用,但我特别想知道它是否可以使用 express.Router() 的单个实例来实现。此实现要求为每个路由显式定义基本 URL。使用 express.Router() 的单个实例,我希望将基本 url 路由设置为“/api”并在其上添加路由。
      猜你喜欢
      • 2019-05-19
      • 2021-08-24
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      相关资源
      最近更新 更多