一尘不染

修改Express.js请求对象

node.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,并以某种方式绕过我的每个URI侦听器的端口号(似乎是req对象中缺少的端口号),但是我希望能够在其中进行他们所有人都可以访问此信息的方式。

此外,主机名在请求之间可能会有所不同(计算机具有多个接口),因此在启动应用程序时,我不能只是将这个字符串连接起来。

目的是向使用者提供URI,以指向此API中的更多资源。

是否可以通过某种方式告诉Express我希望req对象具有此附加信息?是否有比我概述的方法更好的方法?


阅读 453

收藏
2020-07-07

共1个答案

一尘不染

您可以添加一个自定义中间件,该中间件为每个请求设置属性:

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

使用req.get获得Host头,其中应包括端口,如果需要它。

只需确保在之前添加它:

app.use(app.router);
2020-07-07