我的路线和路径设置如下:var path1 = express.Router() , path2 = express.Router() // .. more modules, e.g. express-jwt ..module.exports = function(app, passport) { var path1Func = function(req, res) { return MODEL.findById(req.params.id, function(err, model) { if(!model) { res.statusCode = 404; return res.send({ status: '404 Not found' }); } if(!err) { return res.send({ status: 'OK', model:model }); } else { res.statusCode = 500; return res.send({ status: '500 Server error' }); } }); }; // .. other functions which essentially look like above path1Func .. path1.get('/subPath', path1Func ); path2.get('/otherSubPath', path2Func ); path2.post('/entirelyOtherSubPath', otherPath2Func ); app.use('/path1', path1); app.use('/path2', path2); app.use('/grid', expressJwt({secret: secret})); // Protect Paths}现在,根据我的HTTP请求,POST,GET等的顺序,它们将被执行或返回未找到的404,这意味着express不能将请求解析为某些请求,具体取决于path1.get,path2.get,。上面的图片描绘了我所看到的404,具体取决于我的route.js文件中的路由声明的顺序。当我重新排列订单时,404消失了,我得到了想要的输出这就是为什么我想使用next()来帮助我-记住我正在使用大量的path2.post使事情复杂化。到目前为止,我还没有设法自己做到这一点。我仍然不清楚在上面的示例中next()到底是什么以及如何使用它来使我的路由器在每条路由中都能工作。我没有在这里放置其他路由来节省空间,但是我的API已经很大,并且还会增长。无论我的app.use和POST请求是按什么顺序排序的,在这里使我的应用程序提供内容的方法是什么? 最佳答案 您显示的特定请求得到404的原因是因为您没有匹配的路由模式。您正在请求/grid/dates/:val,但只有一条/grid路线。即使将/grid更改为/grid/dates/:val,您仍然不会响应该请求,因为所有expressJwt()所做的只是验证请求,然后将执行传递给下一个处理程序。因此,考虑到这一点,您可以尝试执行以下操作:app.use('/grid/dates/:val', expressJwt({secret: secret}), function(req, res) { res.send(200, 'hello world!');});关于node.js - Express.js/Node.js:路由顺序很重要,以及将next()放在哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26219291/
10-11 09:07