Express.js 4路由与router.route不匹配 [英] Express.js 4 routes not matching with router.route
问题描述
我正在尝试在Express 4中解决router.route的问题,文档听起来很棒,但是对我来说不起作用.
I'm trying to get the hang of router.route in Express 4. The docs make it sound awesome, but it's just not working for me.
如果我使用命令行工具制作标准应用程序,然后添加如下所示的route/contacts.js:
If I use the command line tool to make a standard app and then add routes/contacts.js that looks like this:
var express = require('express');
var router = express.Router();
router.route('/:contactid')
.get(function(req, res) {
res.send('(get) It worked '+contactid);
})
module.exports = router;
然后在app.js中添加:
Then in app.js add:
var contacts = require('./routes/contacts');
...
app.use('/contacts', contacts);
我希望http://localhost:8000/contacts/1
匹配来自contacts.js的路由.但是,我得到一个错误,该错误实质上表明它与contacts.js中的任何路由都不匹配
I'd expect http://localhost:8000/contacts/1
to match the route from contacts.js. However, I get an error that essentially indicates it's not matching any routes in contacts.js
Error: Not Found
at Layer.app.use.res.render.message [as handle] (project1/app.js:31:15)
at trim_prefix (project1/node_modules/express/lib/router/index.js:226:17)
at c (project1/node_modules/express/lib/router/index.js:198:9)
at Function.proto.process_params (project1/node_modules/express/lib/router/index.js:251:12)
at next (project1/node_modules/express/lib/router/index.js:189:19)
at next (project1/node_modules/express/lib/router/index.js:150:14)
at next (project1/node_modules/express/lib/router/index.js:166:38)
at Function.proto.handle (project1/node_modules/express/lib/router/index.js:234:5)
at Layer.router (project1/node_modules/express/lib/router/index.js:23:12)
at trim_prefix (project1/node_modules/express/lib/router/index.js:226:17)
如果我使用静态前缀添加路由,则可以按预期工作:
If I add routes using a static prefix, it works as expected:
router.get('/1', function(req, res) {
res.send('It worked!');
});
// http://localhost:8000/contacts/1 says "It worked!"
关于我在做什么错的任何提示吗?
Any tips on what I'm doing wrong?
推荐答案
路由器路径是相对于已安装路径的.因此,您的通讯录路由器将改为:
Router paths are relative to the mounted path. So your contacts router would instead just be:
router.route('/:contactid')
.get(function(req, res) {
res.send('(get) It worked ' + req.params.contactid);
})
这篇关于Express.js 4路由与router.route不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!