ExpressJS: как выгрузить req.params из глобального промежуточного программного обеспечения - PullRequest
0 голосов
/ 03 марта 2019

Я не могу написать очень простое промежуточное программное обеспечение для ExpressJS, которое записывает все req.params на консоль.Кажется, что если я добавляю промежуточное программное обеспечение для определенной функции, оно работает, в то время как тот же код в более раннем app.use () не получает никаких данных в req.params.

Вот пример кода:

const express = require('express')

const app = express();

// Simply log the req.params to console
const middle = ( req, res, next ) =>
{
    console.log ( "PARAMS: ", req.params );

    next ();
};

// Trying to access req.params in a global middleware does not work
app.use ( middle );

app.get('/', function (req, res) {
  res.send('hello, world!')
})

// Specifying middleware in mount point works
app.get ( "/hello/:world", middle, ( req, res ) =>
{
    console.log ( "This works: ", req.params );
    res.send ( 'hello' );
} );

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

1 Ответ

0 голосов
/ 03 марта 2019

Он не работает как глобальное промежуточное ПО, потому что этот параметр существует только в URL "/hello/:world", и Express не будет знать об этом параметре, пока не запустит это специальное промежуточное ПО URL.

Вы можете использовать process.nextTickчтобы решить это.

const middle = ( req, res, next ) => {
    process.nextTick(() => console.log ( "PARAMS: ", req.params ));

    next ();
};
...