1

我正在尝试使用ES6类(使用TypeScript)编写express.js控制器。我希望实现的是有一个“基本”控制器,看起来像这样:

类控制器{私有模型:任意构造函数(型号:任意){这个。型号=型号;}showModel(req:any,res:any){res.status(200).json(等待this.Model.findById(req.params.id).lean());}}导出默认控制器;

然后我可以在另一个控制器上继承showModel方法,例如:

从“../Controller”导入Controller;类VideoController扩展控制器{构造函数(型号:任意){super(模型);}//其他方法}

最后,调用VideoController,为其提供一个数据库模型,并从我的数据库中获取一些内容,例如:

const VideoService=新的视频控制器(VideoModel);route.route('/video/:id').get(VideoService.showModel)

然而,我不断收到错误:TypeError:无法读取未定义的属性“Model”,并且无法真正理解为什么showModel()方法突然无法访问类构造函数。我忽略了什么?

1
  • @塞巴斯蒂安·西蒙(SebastianSimon),这无疑有助于弄清楚“这”到底有多贴切。 评论 2021年8月20日16:25

1答案1

重置为默认值
2

通过书写视频服务.showModel您将引用传递给一个与类“分离”的函数(它只是一个常规函数,而不是您期望的方法,并且未定义执行时)。

改写如下:

.get(()=>VideoService.showModel())

其他备选方案:

.get(VideoService.showModel.bind(VideoService))
0

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.