node.js - 使用 Express 和 Nodejs 进行路由时出现 404 错误

标签 node.js express routes

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

最后一行:

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

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

我认为问题在于“/api”的路由位于路由层堆栈中的第 13-14 号,因此堆栈上方存在一些问题,其他一些中间件路由不允许路由到达末尾...我想我只需要追踪到这一点。

最佳答案

这里有两个问题:

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

关于node.js - 使用 Express 和 Nodejs 进行路由时出现 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25904277/

相关文章:

node.js - 使用 nano 将 session 传递给 couchDB

javascript - 如何查找表单参数的存储位置并在请求中使用它们

node.js - 如何在 NodeJS 中使用 Promises(Bluebird) 处理条件回调

node.js - 用axios发送后表单数据为空

html - 相对于url快速加载图片

node.js - Express.js 在单独的文件中设置每个路由

java - 如何使用 RabbitMQ 和 nodejs 运行独立的 java

node.js - Node ,express,处理url中的 ".."符号

javascript - Angular中的$routeProvider在未定义中找不到

ruby-on-rails - Rails 路由没有 Controller 名称的短 URL