Маршрутизация с помощью express.js - ошибка GET не может быть получена - PullRequest
4 голосов
/ 28 февраля 2012

Работа с express.js в первый раз, и я застрял при добавлении моего первого маршрута.

Мой маршрут определен в app.js примерно так:

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

Однако, керлинг до http://localhost:3000/user/1/photos просто приводит к ошибке «not GET».

Индексный файл, который был включен в экспресс, кажется, работает нормально.

Это мой экспресс 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 ]

13 голосов
/ 28 февраля 2012

Попробуйте изменить маршруты с наиболее определенных на наименее конкретные.Маршруты согласованы по порядку.Если он сначала совпадет с маршрутом '/', он перейдет к 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 голос
/ 28 февраля 2012

Ваш пример выглядит хорошо.Это работает для меня (экспресс 2.5.8, узел 0.6.11).На самом деле, хотя bryanmac верен в том, что порядок имеет значение, запрос на /user/1/photos не будет соответствовать маршруту / - он будет для других маршрутов, например, /*, но не / (или /test в этом отношении.).

Какую версию экспресс-узла вы запускаете?Кроме того, вы также можете опубликовать ваши маршруты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...