Как добавить строку запроса в req.url в Express? - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу добавить строку к req.url в Express.Строка выглядит так:

?id=someID&product=bag

У меня нет доступа к клиентскому HTML или серверу.Все, что я получаю от клиента, это просто GET запрос без каких-либо параметров.Поэтому я попытался создать промежуточное программное обеспечение, которое добавляло бы строку запроса, а затем я буду анализировать ее как всегда.Идея была:

// Middleware

const addQuery = (req, res, next) => {
    req.url = req.url + `?id=someID&product=bag`;
    next();
}

А потом в обработчике запросов:

router.get('/', addQuery, (req, res) => {
    console.log(req.query.id);
    console.log(req.query.product);
});

Но это дает мне undefined.Я не могу использовать какую-либо клиентскую сторону js и не могу использовать серверную кодировку.Не мой origin отправляет мне этот запрос.

Так как добавить строку запроса в экспресс-запрос и затем успешно проанализировать ее?

1 Ответ

0 голосов
/ 08 ноября 2018

express, по-видимому, экспортирует промежуточное программное обеспечение под названием query, которое используется для анализа строк запроса. Поскольку это промежуточное ПО обычно вызывается в начале потока запросов, добавление строки запроса к req.url происходит «слишком поздно».

Вот обходной путь, который, кажется, работает:

const addQuery = (req, res, next) => {
  req.url   = req.url + `?id=someID&product=bag`;
  req.query = null; // if this isn't added, the `query` middleware
                    // will assume the query string is already parsed
  next();
}

app.get('/', addQuery, express.query(), (req, res) => {
  ...
});

РЕДАКТИРОВАТЬ : как справедливо предполагает @wlh, addQuery может также напрямую изменять req.query:

const addQuery = (req, res, next) => {
  req.query.id      = 'someID';
  req.query.product = 'bag';
  next();
}

Это должно работать примерно так же, но намного чище.

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