使用express.js进行路由 - 无法获取GET错误

时间:2012-02-28 01:11:51

标签: http node.js routing express

第一次使用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);

2 个答案:

答案 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吗?