我目前正在尝试向我的 NodeJS 项目添加一个服务层,这是我使用 express 和 sequelize 构建的一个简单 API。该项目具有通常的模型、路由和控制器(MRC)形式的结构;每个都有自己的目录。现在我需要做的就是添加另一个包含服务文件的目录。这些文件将以类的形式包含业务逻辑,我将导出并包含在我的控制器文件中。
在这里,我将显示控制器和服务文件:
爆发控制器.js
const EruptionService = require('../services/eruptionService.js');
let Eruption = new EruptionService()
module.exports = {
getEruptions: (req, res) => {
Eruption.get().then(result => {
return res.status(200).json({
message: "Get All Eruptions",
result
})
}).catch(err => {
return res.status(200).json({
message: "internal Server Error",
error: err.message
})
})
}
};
爆发服务.js
const { eruption } = require('../models');
class EruptionService {
constructor () {
this.eruptionModel = eruption;
}
get () {
this.eruptionModel.findAll()
.then(result => result)
.catch(err => err)
}
}
module.exports = EruptionService;
正如我们在这里看到的,在服务文件中,我eruption从模型文件夹中导入了模型并将其包含在构造函数中。然后我创建了一个名为 的方法get,用于从数据库中检索所有喷发数据。
之后,我将该EruptionService类导入到控制器文件中,将其作为实例启动,并将该类包含在getEruptions函数中。然后,该函数将以端点的形式在快速路由中使用。
问题是当我尝试向端点发送请求时,出现以下错误
TypeError: Cannot read property 'then' of undefined
根据错误,似乎EruptionService该类没有正确导出,因为当我调用它时get它是未定义的。
我已经被这个问题困扰了一段时间,我不确定发生了什么。根据这篇文章,我似乎正确地导出了课程。
我也尝试过以如下方式导出
module.exports = {EruptionService: EruptionService}
而且我也尝试过像
const EruptionService = require('../services/eruptionService.js');
但最终,它要么导致相同的错误,要么导致不同的一种错误。我想知道是否有人能指出我错过了什么?提前致谢