Javascript 为什么显式调用nodejs函数参数时表现不同?

Javascript 为什么显式调用nodejs函数参数时表现不同?,javascript,node.js,express,promise,es6-promise,Javascript,Node.js,Express,Promise,Es6 Promise,我正在重构我的nodejs应用程序,并试图使代码看起来更干净,然后在直接调用函数时遇到了这个问题 这项工作: router.route('/').get(({ query }, res, next) => { ItemsLogic.getItems(query) .then((items) => res.json(items)) .catch(next) }) 但这带来了错误: router.route('/').get(({ query }, res, next) =&g

我正在重构我的nodejs应用程序,并试图使代码看起来更干净,然后在直接调用函数时遇到了这个问题

这项工作:

router.route('/').get(({ query }, res, next) => {
ItemsLogic.getItems(query)
  .then((items) => res.json(items))
  .catch(next)
})

但这带来了错误:

router.route('/').get(({ query }, res, next) => {
ItemsLogic.getItems(query)
  .then(res.json)
  .catch(next)
})


错误为:“无法读取未定义的属性'app'。它位于express response的
json()
函数中,与该方法中的
this
对象有关,由于某些原因,该对象未定义。

函数中
this
的值取决于调用方式

给定
res.json()
res

给定
var foo=res.json;foo()
不是
res


json
函数关心
this
的值。传递
res.json
就是获取
json
(函数)的值,并将其与
res
断开连接,就像上面的第二个示例一样。

函数中的
的值取决于调用方式

给定
res.json()
res

给定
var foo=res.json;foo()
不是
res


json
函数关心
this
的值。传递
res.json
就是获取
json
(函数)的值,并将其与
res
断开,就像上面的第二个例子一样。

@abhishekkannojia-你不能传递“语句”(除非你把它们放在字符串中进行
eval
ed)。
res.json
的值是一个函数。@Quentin是的,你说得对。没有意识到
res.json
是一个函数。我想如果你没有正确地阅读代码,就会发生这种情况。感谢您的澄清。要使这项工作顺利进行,只需传递:。然后(res.json.bind(res))@binariedMe您就可以将其作为答案了。这才是真正有效的me@binariedMe你认为什么更优雅?(items)=>res.json(items)或res.json.bind(res)@abhishekkannojia-你不能传递“语句”(除非你把它们放在字符串中进行
eval
ed)。
res.json
的值是一个函数。@Quentin是的,你说得对。没有意识到
res.json
是一个函数。我想如果你没有正确地阅读代码,就会发生这种情况。感谢您的澄清。要使这项工作顺利进行,只需传递:。然后(res.json.bind(res))@binariedMe您就可以将其作为答案了。这才是真正有效的me@binariedMe你认为什么更优雅?(items)=>res.json(items)或res.json.bind(res)