首页 > 解决方案 > 节点快速访问req

问题描述

我正在尝试重新定义send并在每个响应中传递一个快速会话值。但是,我无法req访问send.

01| let app = express();
02| app.use(bodyParser.json());
03| app.use(bodyParser.urlencoded({ extended: true }));
...
56| app.use(function(req, res, next) {
57|   const _send = res.send;
58|   res.send = (props) => {
59|     return _send({ props, authenticated: !!req.session?.authenticated });
60|   };
61|   next();
62| });
63|
64| app.get("/debug/users", async (req, res) => {
65|   const users = await models.User.getAllRows();
66|   return res.send(`<pre>${JSON.stringify(users, null, 2)}</pre>`);
67| });

我收到以下错误:

TypeError: Cannot read property 'req' of undefined
    at send (/server/node_modules/express/lib/response.js:110:18)
    at ServerResponse.res.send (/server/src/index_session_auth.js:59:12)
    at /server/src/index_session_auth.js:66:14
    at processTicksAndRejections (node:internal/process/task_queues:94:5)

我该如何解决这个问题,以便我可以req在重新定义中使用send()

标签: javascriptnode.jsexpress

解决方案


查看您要覆盖的发送方法:

res.send = function send(body) {
  var chunk = body;
  var encoding;
  var req = this.req;

它关心this您通过调用_send()而不是更改的值res.send()

你需要保持this价值。

return _send.call(res, { props, authenticated: !!req.session?.authenticated });

推荐阅读