Javascript TypeError XXX不是NodeJS中的函数

Javascript TypeError XXX不是NodeJS中的函数,javascript,node.js,Javascript,Node.js,我试图在nodejsapi中使用一个服务,使api更易于测试,但是当我注入服务类时,它告诉我gettask方法不存在 路线 服务 当我去http://localhost:3000/api/tasks 我得到这个错误: TypeError:TodoService.getTasks不是函数 getTasks是TodoService实例上的一个方法-您还没有创建一个,即像new TodoService一样 或者实例化一个实例 await new TodoService().getTasks(); 或

我试图在nodejsapi中使用一个服务,使api更易于测试,但是当我注入服务类时,它告诉我gettask方法不存在

路线

服务

当我去http://localhost:3000/api/tasks 我得到这个错误:

TypeError:TodoService.getTasks不是函数

getTasks是TodoService实例上的一个方法-您还没有创建一个,即像new TodoService一样

或者实例化一个实例

await new TodoService().getTasks();
或者,将gettask设置为静态

或者考虑到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;

getTasks是TodoService实例上的一个方法-您还没有创建一个,即与新的TodoService一样-要么将getTasks声明为静态异步getTasks,要么不将TodoService设置为类,而是将var TodoService={etcnice成功了。请随意把它作为一个答案,让您了解要点。它有什么优点或缺点吗?您建议的单元测试的第二种方法,或者本质上是一样的?我是新手,这实际上取决于用法-我无法告诉您哪个更好,因为对我来说,我同时添加的最后两种方法对我来说几乎是相同的谢谢你,先生!
await new TodoService().getTasks();
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;
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;