Использование req.params для express среднего уровня - PullRequest
0 голосов
/ 28 января 2020

У меня есть кодовый блок express следующим образом:

var express = require('express');
var bodyParser = require('body-parser');

// server application
var app = new express();
app.use('/:user', bodyParser.json());

// application level validations
app.use('/:user', (req, res, next) => {
    console.log('[application]', req.params);
    req.params.user = parseInt(req.params.user);
    next();
});

// level-1 router
var router1 = express.Router({
    mergeParams: true
});

// level-1 router registered with application
app.use('/:user/one/:a', router1);

// router level-1 validations
router1.use('/', (req, res, next) => {
    console.log('[router-1]', req.params);
    req.params.a = parseInt(req.params.a);
    next();
});

// level-2 router
var router2 = express.Router({
    mergeParams: true
});

// level-2 router registered with level-1 router
router1.use('/two/:b', router2);

// router level-2 validations
router2.use('/', (req, res, next) => {
    console.log('[router-2]', req.params);
    req.params.b = parseInt(req.params.b);
    next();
});

// level-2 router has a resource
router2.get('/func', (req, res, next) => {
    res.send('Done!');
});

// start the application
app.listen(2345);

Здесь можно предположить, что каждое промежуточное ПО выполняет некоторые проверки параметров пути и обновляет свойства на месте. Скажем, это промежуточное программное обеспечение проверяет тип значения и обновляет значение как соответствующий тип, вместо того, чтобы сохранять как строку (как AJV делает, когда { coerceTypes: true }).

В приведенном выше блоке кода я ожидаю, что обновленные значения в req.params через посредников, но не происходит. То есть для такого звонка http://localhost:2345/123/one/1/two/2/func в консоли я ожидаю ...

[application] {
    user: '123'
}

[router-1] {
    user: 123, a: '1'
}

[router-2] {
    user: 123, a: 1, b: '2'
}

Но я получаю ...

[application] {
    user: '123'
}

[router-1] {
    user: '123', a: '1'
}

[router-2] {
    user: '123', a: '1', b: '2'
}

Мне нужна помощь для достижения ожидаемого выход.

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