Javascript Express:将res.json作为参数传递时出错
我有这样的想法:Javascript Express:将res.json作为参数传递时出错,javascript,node.js,express,scope,Javascript,Node.js,Express,Scope,我有这样的想法: ... var someService = function(next) { var result = {"some": "json"}; next(result); }; app.get('/someRoute', function (req, res) { someService(function (result) { res.json(result); }); }); ... 我想更改获取此信息的路径: app.get(
...
var someService = function(next) {
var result = {"some": "json"};
next(result);
};
app.get('/someRoute', function (req, res) {
someService(function (result) {
res.json(result);
});
});
...
我想更改获取此信息的路径:
app.get('/someRoute', function (req, res) {
someService(res.json);
});
但它给了我:
TypeError:无法在res.json处调用未定义的方法“get”
(…/node_modules/express/lib/response.js:185:22)在someService
我想问题在于范围。这是什么?问题似乎在于Javascript中方法的范围是按语法绑定的 在res.json方法中,它引用了
this
。当像res.json(/*some arg*/)
这样调用时,这个
的计算结果为res
。当您将res.json
作为回调传入时,比如someService(res.json)
,此
不再绑定到res
您可以将其更改为someService(res.json.bind(res))
通过显式地将this
绑定到res
来获得所需的结果
MDN文章:
问题似乎在于Javascript中方法的范围是按语法绑定的 在res.json方法中,它引用了
this
。当像res.json(/*some arg*/)
这样调用时,这个
的计算结果为res
。当您将res.json
作为回调传入时,比如someService(res.json)
,此
不再绑定到res
您可以将其更改为someService(res.json.bind(res))
通过显式地将this
绑定到res
来获得所需的结果
MDN文章: