Javascript Sequelize.js/Node.js/Express.js:Tasks.findAll()返回类型错误:无法读取属性';findAll';未定义的

Javascript Sequelize.js/Node.js/Express.js:Tasks.findAll()返回类型错误:无法读取属性';findAll';未定义的,javascript,node.js,express,sequelize.js,babeljs,Javascript,Node.js,Express,Sequelize.js,Babeljs,当请求/tasks时,代码应该返回一个带有空tasks的JSON对象,而不是返回一条消息error-TypeError:cannotread属性'findAll'为undefined。根据消息,错误源来自routes>tasks.js,请参见下面的屏幕截图或/和沙盒上的实时代码 项目文件夹: 一些代码: src>models>tasks.js module.exports = (sequelize, DataType) => { const Tasks = sequelize.de

当请求/tasks时,代码应该返回一个带有空tasks的JSON对象,而不是返回一条消息error-TypeError:cannotread属性'findAll'为undefined。根据消息,错误源来自routes>tasks.js,请参见下面的屏幕截图或/和沙盒上的实时代码

项目文件夹:

一些代码: src>models>tasks.js

module.exports = (sequelize, DataType) => {
  const Tasks = sequelize.define(
    "Tasks",
    {
      id: {
        type: DataType.INTEGER,
        primaryKey: true,
        autoIncrement: true
      },
      title: {
        type: DataType.STRING,
        allowNull: false,
        validate: {
          notEmpty: true
        }
      },
      done: {
        type: DataType.BOOLEAN,
        allowNull: false,
        defaultValue: false
      }
    },
    {
      classMethods: {
        associate: models => {
          Tasks.belongsTo(models.Users);
        }
      }
    }
  );
  return Tasks;
};
src>routes>tasks.js

module.exports = (sequelize, DataType) => {
  const Tasks = sequelize.define(
    "Tasks",
    {
      id: {
        type: DataType.INTEGER,
        primaryKey: true,
        autoIncrement: true
      },
      title: {
        type: DataType.STRING,
        allowNull: false,
        validate: {
          notEmpty: true
        }
      },
      done: {
        type: DataType.BOOLEAN,
        allowNull: false,
        defaultValue: false
      }
    },
    {
      classMethods: {
        associate: models => {
          Tasks.belongsTo(models.Users);
        }
      }
    }
  );
  return Tasks;
};
module.exports = app => {
  const Tasks = app.db.models.tasks;
  app.get("/tasks", (req, res) => {
    Tasks.findAll({}).then(tasks => {//source of error as per error message
      res.json({ tasks: tasks });
    });
  });
};
src>db.js

var path = require("path");

var fs = require("fs");

var Sequelize = require("sequelize");
//const config = require("./libs/config.js");

var sequelize = null;
let db = null;

module.exports = app => {
  if (!db) {
    const config = app.libs.config;
    sequelize = new Sequelize(
      config.database,
      config.username,
      config.password,
      config.params
    );
    db = {
      sequelize,
      Sequelize,
      models: {}
    };
    const dir = path.join(__dirname, "models");
    fs.readdirSync(dir).forEach(file => {
      const modelDir = path.join(dir, file);
      const model = sequelize.import(modelDir);
      db.models[model.name] = model;
    });
    Object.keys(db.models).forEach(key => {
      db.models[key].options.classMethods.associate(db.models);
    });
  }
  return db;
};
src>index.js

var express = require("express");
var consign = require("consign");
var app = express();

consign({ cwd: "src" })
  .include("./libs/config.js")
  .then("db.js")
  .then("./libs")
  .then("./routes")
  .into(app);

在文件routes/tasks.js第2行,在任务上添加一个大写字母

  const Tasks = app.db.models.Tasks;
那么它应该会起作用