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文章: