我在构造函数中从类创建一个新对象,并且每当它运行时我得到一个错误,操作在方法中是未定义的,尽管它是在构造函数中定义的。操作本身经过全面测试,在单独的环境中运行良好,因此不是问题所在。我用Babel构建它,不直接在Node 7.0.0中运行它
import Operate from "./operate"
export default class {
constructor(Schema) {
this.schema = Schema
this.operate = new Operate(this.schema)
console.log(this.operate.run) // <- Logs just fine
}
update(req, res) {
console.log(this.operate.run) // <- Nada
this.operate.run(req.body)
.then(value => {
res.status(200).json(value)
})
}
这感觉我错过了一些基本的东西。我听说这不是一个很好的模式,所以请随意提出一个更好的方法。非常感谢提前。
更新:这是使用更新的方式。我不怀疑这里有任何问题,因为当我从另一个模块导入控制器作为函数而不是类
时它工作得很好import {Router, } from "express"
import Controller from "../controller"
import User from "./user.model"
let controller = new Controller(User)
let router = new Router()
router.post("/", controller.update)
module.exports = router
答案 0 :(得分:2)
从此改变:
router.post("/", controller.update)
到此:
router.post("/", controller.update.bind(controller))
当您传递controller.update
时,它只传递了一个指向该方法的指针,并且与controller
对象的任何关联都将丢失。然后,当稍后调用update
方法时,与适当的对象没有关联,因此方法中的this
处理程序是错误的,并且您得到了您看到的错误。
您要么强制绑定对象中的update
方法,要么将方法传递给其他可能无法正确调用的方法,您可以使用上述结构传递方法的绑定版本。
您还可以修改update
方法的定义,通过将其添加到构造函数中将其永久绑定到构造函数中的对象:
this.update = this.update.bind(this);