【发布时间】:2017-12-06 18:46:01
【问题描述】:
我正在重构我的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’”。它在快速响应的json() 函数中,与该方法中的this 对象有关,由于某种原因未定义。
【问题讨论】:
-
@abhishekkannojia — 你不能传递“语句”(除非你把它们放在字符串中成为
evaled)。res.json的值是一个函数。 -
@Quentin 是的,你是对的。没有意识到
res.json是一个函数。我想这就是当您没有正确浏览代码时会发生的情况。感谢您的澄清。 -
要完成这项工作,只需通过:.then(res.json.bind(res))
-
@binariedMe 你会把它作为答案吗?这实际上对我有用
-
@binariedMe 你认为什么更优雅? (items) => res.json(items) 或 res.json.bind(res)
标签: javascript node.js express promise es6-promise