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.
If I use the mand 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;
Then in app.js add:
var contacts = require('./routes/contacts');
...
app.use('/contacts', contacts);
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?
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.
If I use the mand 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;
Then in app.js add:
var contacts = require('./routes/contacts');
...
app.use('/contacts', contacts);
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);
})
I think this should work (does for me)
In routes/contacts.js
/* Created by matthias on 6/9/14. */
var express = require('express');
var router = express.Router();
router.get('/:contactid', function(req, res) {
res.send('(get) It worked ' + req.params.contactid);
});
module.exports = router;
Then in app.js
var contacts = require('./routes/contacts');
var app = express();
app.use('/contacts', contacts);
Works for me: localhost:3000/contacts/:3
Predictably getting: (get) It worked 3