NodeJS Express。 res.send()分配给另一个var时失败
我正在使用Express v3.4.4。 当我尝试这样做:
var cb = res.send; cb(result);
我收到一个错误:
...\node_modules\express\lib\response.js:84 var HEAD = 'HEAD' == req.method; TypeError: Cannot read property 'method' of undefined
在代码中,工作一:
workflow.on('someEvent', function () { res.send({ error: null, result: 'Result' }); });
不工作:
workflow.on('someEvent', function () { var cb = res.send; cb({ error: null, result: 'Result' }); });
send
实际上是对象res
的function。 它试图使用res
对象中的其他数据。 但是,当你这样做
var cb = res.send; cb({...});
你只是使用函数对象send
没有对res
对象的引用。 这就是为什么它不工作。
如果你需要做这样的事情,那么像这样绑定res
对象到send
函数
var cb = res.send.bind(res);
现在
cb({...});
也将工作。 因为res
被绑定到send
函数对象,并且结果函数被存储在cb
。
bind
函数实际上是Function.prototype.bind
这是因为在JavaScript中, this
方法内部的值绑定到了包含对象。
- 调用
res.send()
使得send
函数内部的值为res
。 - 相反,调用未绑定的版本
cb()
这个值并不是预期的。
Express.js的内部实现依赖于this
绑定的事实,并且很可能包含一个像this.method
这样的expression式,该expression式导致TypeError: Cannot read property 'method' of undefined
错误。