javascript - 节点快速访问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()
?
解决方案
查看您要覆盖的发送方法:
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 });
推荐阅读
- debugging - 正确使用 DEBUG_NEW
- python - 如何在 Tkinter 中格式化来自 Text Widget 的文本输入
- ansible - 如何为 ansible 变量提供选项卡空间
- http - Google Cloud Text to Speech - 为什么通过 Go 客户端库和 REST API 的请求之间存在延迟差异?
- doctrine-orm - 如何在 TYPO3 中注册 DQL 函数
- weblogic - 如何启用 Weblogic 托管服务器 ResolveDNSName?
- angular - 重新排序视图的子项。Nativescript Angular
- java - 如何迭代矩阵的索引?
- c - C 在循环中分配内存:错误 munmap_chunk():无效指针
- java - 单击图标时,应用程序崩溃