第一次使用express.js
,我不得不添加第一条路线。
我的路线在app.js
中定义如下:
app.get('/user/:id/photos', function(req,res){
res.send('user' + req.params.id);
});
然而,卷曲到http://localhost:3000/user/1/photos
只会导致"无法获得"错误。
快递中包含的索引文件似乎工作得很好。
这是我的快递app.js
文件:
var express = require('express'),
routes = require('./routes');
var app = module.exports = express.createServer();
// Configuration
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function() {
app.use(express.errorHandler({
dumpExceptions: true,
showStack: true
}));
});
app.configure('production', function() {
app.use(express.errorHandler());
});
// Routes
app.get('/', routes.index);
app.get('/test', routes.test);
app.get('/user/:id/photos', function(req, res) {
res.send('user' + req.params.id);
});
app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
答案 0 :(得分:13)
尝试将路线从最具体到最不具体。路线按顺序匹配。如果它首先匹配'/'
路由,它将传递给routes.index
,并且永远不会有机会路由到/user/:id/photos
功能。
所以,而不是:
app.get('/', routes.index);
....
app.get('/user/:id/photos', function(req,res){
尝试:
app.get('/user/:id/photos', function(req,res){
....
app.get('/', routes.index);
作为旁注,我认为/user/photos/:id
似乎更好,但我在我的应用中尝试了/something/:id/somethingelse
,而且效果很好。
答案 1 :(得分:1)
你的例子看起来很好。它适用于我(表达2.5.8,节点0.6.11)。实际上,虽然bryanmac是正确的,但订单很重要,/user/1/photos
的请求与路由/
不匹配 - 它会用于其他路由,例如/*
,但不是/
(或/test
)。
你运行什么版本的express,node?另外,你也可以发布你的routes.js吗?