javascript - TypeError XXX 不是 NodeJS 中的函数
问题描述
我正在尝试在我的 NodeJS api 中使用服务来使我的 API 更易于测试,但是当我注入服务(类)时,它告诉我该方法getTasks()
不存在。
路线
const TodoService = require('../../services/todo');
const todo = router => {
router.get('/tasks', async (req, res, next) => {
try {
const { message, tasks, status } = await TodoService.getTasks();
return res.status(201).json({ message, tasks, status });
} catch (e) {
return next(e);
}
});
};
module.exports = todo;
服务
const TaskModel = require('../models/task');
class TodoService {
async getTasks() {
try {
const tasks = await TaskModel.find();
return {
message: 'Fetched posts successfully.',
tasks: tasks,
status: 200
};
} catch (err) {
if (!err.statusCode) {
err.statusCode = 500;
}
next(err);
}
}
}
module.exports = TodoService;
当我去http://localhost:3000/api/tasks
我得到这个错误:
TypeError: TodoService.getTasks 不是函数
解决方案
getTasks
是一个实例TodoService
上的方法 - 你还没有创建一个,即喜欢new TodoService()
要么实例化一个实例
await new TodoService().getTasks();
或者,使 getTasksstatic
const TaskModel = require('../models/task');
class TodoService {
static async getTasks() {
try {
const tasks = await TaskModel.find();
return {
message: 'Fetched posts successfully.',
tasks: tasks,
status: 200
};
} catch (err) {
if (!err.statusCode) {
err.statusCode = 500;
}
next(err);
}
}
}
module.exports = TodoService;
或者考虑到 TodoService 看起来甚至不应该被实例化,这就是我使用您显示的代码的方式,使 TodoService 成为一个简单的对象
const TaskModel = require('../models/task');
const TodoService = {
async getTasks() {
try {
const tasks = await TaskModel.find();
return {
message: 'Fetched posts successfully.',
tasks: tasks,
status: 200
};
} catch (err) {
if (!err.statusCode) {
err.statusCode = 500;
}
next(err);
}
}
}
module.exports = TodoService;
推荐阅读
- oracle - 如何在一个表上编写触发器以防止更新数据但将这些数据插入到另一个表中
- reactjs - 是否可以在反应导入中传递道具
- javascript - 再次按下按钮时如何从ul中删除所有li
- java - 查找在多个位置产生常量的所有有效迭代范围
- batch-file - 无法通过批处理文件订阅或发布到我的本地 mosquitto
- javascript - 使用 Django 和 OpenLayers 比较不同的层
- django - 数据未从 Django Rest 检索到 Flutter App
- mysql - 获取Oracle存储过程内表中插入记录的主键值
- ruby-on-rails - 在获取请求时更新属性?
- excel - Powershell 脚本使用管道分隔符和文本限定符将 excel 转换为 csv