[英]Monkeypatch res.send
來自大學的建議並遵循此答案
我正在嘗試修補res.send補丁,但出現以下錯誤:
TypeError: Cannot read property 'req' of undefined
這是我的代碼
const express = require('express')
const app = express()
app.use((req, res, next ) => {
const oldSend = res.send;
res.send = (data) => {
console.log(data.length);
oldSend(data);
}
next();
})
app.get('/', (req, res) => res.send('Hello World!'))
完整的堆棧跟蹤:
Example app listening on port 3000!
undefined
TypeError: Cannot read property 'req' of undefined
at send (/Users/code/js/hello/node_modules/express/lib/response.js:110:17)
at ServerResponse.res.send (/Users/code/js/hello/index.js:8:9)
at app.get (/Users/code/js/hello/index.js:12:32)
at Layer.handle [as handle_request] (/Users/code/js/hello/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/code/js/hello/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/code/js/hello/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/code/js/hello/node_modules/express/lib/router/layer.js:95:5)
at /Users/code/js/hello/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/Users/code/js/hello/node_modules/express/lib/router/index.js:335:12)
at next (/Users/code/js/hello/node_modules/express/lib/router/index.js:275:10)
第110行是:
res.send = function send(body) {
var chunk = body;
var encoding;
var req = this.req; //<-- THIS
var type;
// settings
var app
....
這是因為方法沒有綁定到JavaScript中的實例。
如果調用a.fun()
該函數的代碼里面, this
最初被設定為a
。 但這僅是因為在方法調用中出現了a
:否則fun
是與a
無關的任意函數。
在您的情況下,這應該起作用:
oldSend.call(res, data);
call()
是設置this
。
找到解決方案后,oldSend失去了上下文(?)
如果我添加bind(res)
:
const oldSend = res.send.bind(res);
問題解決了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.