Подтвердить что ты не робот

Изменение объекта запроса Express.js

В express.js я хотел бы предоставить дополнительный атрибут объекта запроса для каждого из моих слушателей URI. Это обеспечило бы протокол, имя хоста и номер порта. Например:

app.get('/users/:id', function(req, res) {
  console.log(req.root); // https://12.34.56.78:1324/
});

Я мог бы, конечно, объединить req.protocol, req.host и каким-то образом обойти номер порта (кажется, отсутствует в объекте req) для каждого из моих слушателей URI, но я хотел бы иметь возможность сделайте это так, чтобы все они могли получить доступ к этой информации.

Кроме того, имя хоста может варьироваться в зависимости от запроса (машина имеет несколько интерфейсов), поэтому я не могу просто конкатенировать эту строку при запуске приложения.

Цель состоит в предоставлении URI для потребителя, который указывает на дополнительные ресурсы в этом API.

Есть ли способ сказать Экспрессу, что я хочу, чтобы объекты req имели эту дополнительную информацию? Есть ли лучший способ сделать это, чем то, что я излагаю?

4b9b3361

Ответ 1

Вы можете добавить собственное промежуточное программное обеспечение, которое устанавливает свойство для каждого запроса:

app.use(function (req, res, next) {
    req.root = req.protocol + '://' + req.get('host') + '/';
    next();
});

Используя req.get, вы получите заголовок Host, который должен включать порт, если это необходимо.

Просто добавьте его прежде:

app.use(app.router);

Ответ 2

Вы можете расширить прототип express.request.

Ответ 3

Лучший способ изменить объект запроса - добавить свою собственную функцию промежуточного слоя до объявления app.router.

    app.use(function(req, res, next){
      // Edit request object here
      req.root = 'Whatever I want';
      next();
    });
    app.use(app.router);

Это изменит объект запроса, и каждый маршрут сможет получить доступ к свойству req.root, поэтому

    app.get('/',function(req, res, next){
      console.log(req.root); // will print "Whatever I want";
    });

Ответ 4

Вы можете использовать промежуточное программное обеспечение. Добавьте это в блок app.configure:

app.use(function (req, res, next) {
  req.root = 'WHAT YOU WANT';
  next();
});

Каждый запрос будет жестко выполнять эту функцию, а затем перейти к правильному блоку url благодаря next().