Node Express Router не может получить параметры ответа

Я не могу получить параметры маршрута с помощью простой функции express.Router() в веб-приложении.

Вот минимальный пример:

var http      = require('http');
const express = require('express');
const app     = express();

app.use('/hello/:world', express.Router()
    .get('/', function (req, res) {
        console.log("hello : ", req.params); //
        res.status(200).send({status: 'success', params: req.params});
}));

var port = process.env.PORT || 3000;
app.set('port', port);
var server = http.createServer(app);
server.listen(port);

Я не получаю никаких ошибок, res.params просто пуст, когда я пытаюсь достичь: http://localhost:3000/hello/100 например.

Вот ответ:

{
  "status": "success",
  "params": {}
}

До сих пор я пытался установить express.Router({ params: 'inherit' }), как указано здесь: https://github.com/expressjs/express/issues/2151#issuecomment-44716623, но это ничего не меняет.

А вот и руководство: http://expressjs.com/en/guide/routing.html< /а>


person s.k    schedule 02.02.2018    source источник
comment
Свойство params существует в объекте req, но не res. У тебя, кажется, опечатка.   -  person lolbas    schedule 02.02.2018
comment
вы были правы -› исправлено. Спасибо.   -  person s.k    schedule 02.02.2018
comment
Решает ли это проблему пустого ответа?   -  person lolbas    schedule 02.02.2018
comment
Нет, но я нашел рабочее решение на другой странице, которую никогда раньше не открывал в документе.   -  person s.k    schedule 02.02.2018


Ответы (1)


Отвечать:

То, что, наконец, сработало для меня, основано на этом:

Документация по API: http://expressjs.com/en/api.html
SO пример: Неопределенные параметры Express Router с помощью router.use при разделении между файлами

установить express.Router({mergeParams: true}).

So:

var http      = require('http');
const express = require('express');
const app     = express();

app.use('/hello/:world', express.Router({mergeParams: true})
    .get('/', function (req, res) {
        console.log("hello : ", req.params); //
        res.status(200).send({status: 'success', params: req.params});
}));

var port = process.env.PORT || 3000;
app.set('port', port);
var server = http.createServer(app);
server.listen(port);

Дает следующий ответ через http://localhost:3000/hello/10

{
  "status": "success",
  "params": {
    "world": "10"
  }
}
person s.k    schedule 02.02.2018