【问题标题】:Why is db.findAll() is not a function?为什么 db.findAll() 不是函数?
【发布时间】:2019-10-12 05:24:53
【问题描述】:

我使用 sequelize 创建数据库实例,但它没有 findAll() 之类的方法。我做错了什么?

const Sequelize = require('sequelize');
const router = require('express').Router();

const db = new Sequelize('web-prog', 'postgres', '1234', {
    host: 'localhost',
    dialect: 'postgres',
    logging: false
});

router.get('/', (req, res) => {
    db
        .findAll()
        .then(itemlist => res.json(itemlist))
        .catch(err => console.log(err))
});

module.exports = { db, router };

//那么我需要这样的

const db = require('./database').db;

TypeError: db.findAll 不是函数

【问题讨论】:

  • 这是一个承诺。
  • @TríPhan 它返回一个 Promise,但这不是它找不到的原因,这是因为它在 Model 而不是 Sequelize 实例上。

标签: javascript node.js express orm sequelize.js


【解决方案1】:

您试图在Sequelize 连接上调用findAll(),但是在Model 上找到了此方法,这就是您收到错误的原因。

创建一个名为 MyModel 的模型

module.exports = function Model(db, DataTypes) {
  const MyModel = db.define('myModel', {/* fields */, {/* options */});
  return MyModel;
}

然后你会加载模型 -

  const db = require('./database').db;
  const myModel = db.import(path.join(__dirname, '/', 'myModel'));
  myModel.findAll() <-- this will exist and return a promise

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 2019-05-25
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多