我有这样的事情:
...
var someService = function(next) {
var result = {"some": "json"};
next(result);
};
app.get('/someRoute', function (req, res) {
someService(function (result) {
res.json(result);
});
});
...
我想更改get to this:
app.get('/someRoute', function (req, res) {
someService(res.json);
});
但它给了我:
TypeError:无法调用方法' get'在res.json中未定义 某个服务中的(... / node_modules / express / lib / response.js:185:22)
我猜这个问题与范围有关。它是什么?
答案 0 :(得分:4)
问题似乎是Javascript中的方法范围在语法上是绑定的。
在res.json方法中,它引用this
。当调用res.json(/* some arg */)
时,this
评估为res
。当您将res.json
作为回调传递时,someService(res.json);
,this
不再绑定到res
。
您可以将someService(res.json.bind(res));
显式绑定到this
,将其更改为res
以获得所需结果。
MDN文章: