从类未定义的构造函数中的新对象
我从构造函数中的类创build一个新的对象,每当它运行时,我得到一个错误,操作未定义的方法,虽然它在构造函数中定义。 操作本身是经过彻底的testing,并在单独的环境中工作,所以这不是问题。 我使用Babel构build它, 而不是直接在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) }) }
这感觉就像我错过了一些根本的东西。 我听说这不是一个伟大的模式,所以请随时提出一个更好的方法。 非常感谢。
更新:这是如何使用更新。 我不怀疑这里有任何问题,因为它已经工作得很好,当我从另一个模块导入控制器作为一个function,而不是一个类
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
由此改变:
router.post("/", controller.update)
对此:
router.post("/", controller.update.bind(controller))
当你传递controller.update
,它只传递一个指向该方法的指针,并且与controller
对象的任何关联都将丢失。 然后,稍后调用该update
方法时,与适当的对象没有关联,因此该方法中的this
处理程序是错误的,并且会看到您所看到的错误。
您可以强制update
方法绑定在对象中,或者当您将方法传递给其他可能未被正确调用的方法时,可以使用上述结构传递方法的绑定版本。
你也可以修改你的update
方法的定义,把它永久绑定到构造函数中的对象上,方法是把它添加到构造函数中:
this.update = this.update.bind(this);
- 如何在Heroku上启用ES2017function来运行Node.js应用程序?
- RollupJS`解决失败:错误:无法find模块'babel-runtime'`
- 如何在节点项目中使用babel编译的类?
- 为什么没有instanceof在babel-node下的Error子类的实例上工作?
- 是否可以在生产中使用require('babel / register)'
- 如何在Express中实例化一个具有转码的ES6代码的对象?
- asynchronous/等待拒绝承诺
- 在mochatesting中为babel / react / node应用程序启用绝对导入
- Heroku找不到`babel-core / register`