node.js - 修改 Express.js 请求对象

标签 node.js express

在 express.js 中,我想为我的每个 URI 监听器的请求对象提供一个附加属性。这将提供协议(protocol)、主机名和端口号。例如:

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

我当然可以连接 req.protocol、req.host,并以某种方式传递每个 URI 监听器的端口号(似乎从 req 对象中丢失),但我希望能够以他们所有人都可以访问此信息的方式进行。

此外,主机名可能因请求而异(机器有多个接口(interface)),所以我不能在应用程序启动时连接这个字符串。

目标是向消费者提供指向此 API 中更多资源的 URI。

是否有某种方法可以告诉 Express 我希望 req 对象具有这些附加信息?有没有比我所概述的更好的方法来做到这一点?

最佳答案

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

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

使用 req.get获取 Host header ,如果需要,该 header 应包含端口。

请务必在之前添加:

app.use(app.router);

关于node.js - 修改 Express.js 请求对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518132/

相关文章:

javascript - React JS + React Router 可以使用 $.get 但不能使用 $.ajax PUT

javascript - Handlebars 部分未完全显示在布局中

javascript - Express.js - 如何获取已定义路线的数量?

node.js - Typesafe Express 中间件和路由?

javascript - 初始化并比较 Javascript

node.js - 在具有多个套接字的 Canvas 上定位

node.js - Typescript 在 Mongoose pre hook 中抛出编译错误(预期有 1 个参数,但得到了 0)

javascript - 厄运金字塔

javascript - 表达正则表达式字符串表示法

node.js - npm peerDependency 问题与 grunt 和 flatiron peer