Изменение объекта запроса 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 имели эту дополнительную информацию? Есть ли лучший способ сделать это, чем то, что я излагаю?
Ответы
Ответ 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()
.