javascript - 为什么使用多个子路由器时会出现 404?

标签 javascript express routes

我一直在探索express.js 4.13+。看起来相当不错。但是,当使用多个子路由器时,我只能到达第一个子路由器声明的端点。剩余的路由不断抛出 404。请求似乎没有沿着路由堆栈传播。

app.js

...
app.use(require('./controllers'));
app.use(require('./middlewares/404'));
...

Controller /index.js

module.exports = router = new Router();

router.get('/', function(req, res) {
  res.render('home');
});

router.use('/empty', require('./empty')); // works
router.use('/member', require('./user')); // throws 404 works only if above mount is removed.

Controller /empty.js

var Router = require('express').Router; 
module.exports = router = new Router();
router.get('/', function(req, res, next) {
  res.send('empty');
});

导航到 //empty 按预期工作,但 /member 下的所有路由均失败并显示 404。感谢任何帮助。

最佳答案

问题在于使用 module.exports = router = new Router(); 模式。我的理解是,前面的语句将 router 导出为全局变量,在代码中的各个位置使用。将此语句更改为 var router = module.exports = new Router(); 就成功了。

关于javascript - 为什么使用多个子路由器时会出现 404?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33471681/

相关文章:

JavaScript 文本框换行

docker - 无法通过MicroK8s集群中的Kubernetes NodePort服务访问Express.js服务

node.js - Express JS、Mongoose JS 和 Jade 中的文本区域换行

javascript - 比使用 routeguard 更安全地保护 Angular 路线?

javascript - html 中的 Image Element 构造函数的浏览器支持是什么?

javascript - 如何将表单中的值存储在变量中?

javascript - 在 req.body 中包含表

angularjs - 如何检查我位于哪个页面,或者哪个是当前页面的 Controller ?

asp.net-mvc-4 - 带有 Id 和索引操作的 MVC4 路由

javascript - 为什么当用户输入空格或字符过多/不足时,此函数不给出 window.alert?