【问题标题】:Routing with express.js - Cannot GET Error使用 express.js 进行路由 - 无法获取错误
【发布时间】:2012-03-17 12:17:38
【问题描述】:

第一次与express.js 合作,我一直在添加我的第一条路线。

我的路线在app.js 中定义如下:

app.get('/user/:id/photos', function(req,res){
    res.send('user' + req.params.id);
});

然而,卷曲到http://localhost:3000/user/1/photos 只会导致“无法获取”错误。

express 中包含的索引文件似乎工作得很好。

这是我的快递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);

【问题讨论】:

  • 也请贴出你的 express 配置代码,你的路由定义没有问题。
  • 好的,我发布了我的 app.js 文件,还请注意只有 routes.index 正在工作

标签: http node.js routing express


【解决方案1】:

尝试将路线从最具体更改为最不具体。路线按顺序匹配。如果它首先匹配'/' 路由,它将传递给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,它运行良好。

【讨论】:

  • 我重新安装了 node 和 express,现在它似乎工作正常。我的路线没有遵循这个约定,所以添加了这个作为正确答案
  • 你的解释没有任何意义!根据路由,express 会调用相应的关联处理程序,即这种情况下的顺序无关紧要;仅当您处理中间件时,顺序才重要。另一件事:/user/photos/:id 在逻辑上与 OP 想要实现的不同,即获取具有特定 ID 的某个用户的照片,而不是从所有用户的照片中获取具有特定 ID 的特定照片,IMO。
【解决方案2】:

您的示例看起来不错。它对我有用(表达 2.5.8,节点 0.6.11)。实际上,虽然 bryanmac 是正确的,订单很重要,但对 /user/1/photos 的请求不会匹配路由 / - 它会匹配其他路由,例如/*,但不是/(或/test)。

你运行什么版本的 express、node?另外,您也可以发布您的 routes.js 吗?

【讨论】:

  • 这种情况下顺序重要吗?不!
【解决方案3】:

我正好遇到了这个问题。当你想使用这些代码块的路由时,你应该改变

app.get('/', routes.index);
app.get('/test', routes.test);

app.use('/', routes.index);
app.use('/test', routes.test);

【讨论】:

    猜你喜欢
    • 2017-09-02
    • 1970-01-01
    • 2018-03-03
    • 2017-08-08
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 2016-05-01
    • 2020-08-13
    相关资源
    最近更新 更多