【问题标题】:cannot read property FindAll() of undefined in node/express JS, existing mySQL DB无法读取节点/express JS、现有 mySQL DB 中未定义的属性 FindAll()
【发布时间】:2021-03-12 22:56:54
【问题描述】:

晚上好,我在我的 express JS 应用程序中遇到了这个错误,不知道如何解决它。 我正在使用现有的 mySQL 数据库并尝试从 myDB 数据库中的 tbl_person 表中检索项目。我对此很陌生,我不太确定我做错了什么。我在网上看到的一些例子并不完全清楚,所以我需要一些帮助。

这是我的示例代码:

db.config.js

module.exports = {
    HOST: "127.0.0.1",
    USER: "root",
    PASSWORD: "password",
    DB: "myDB"
}; 

person.model.js

module.exports = (sequelize, DataTypes) => {
    const Person = sequelize.define('tbl_person', {
        personID: {
            type: DataTypes.STRING(36),
            field: 'personId',
            allowNull: false,
            primaryKey: true,            
        },
        
        accountname: {
            type: DataTypes.STRING(50),
            field: 'accountname',
            allowNull: true,
        },
    password: {
            type: DataTypes.STRING(100),
            field: 'password',
            allowNull: true,
        },
        nameprefix: {
            type: DataTypes.STRING(20),
            field: 'nameprefix',
            allowNull: true,
        },
        firstname: {
            type: DataTypes.STRING(50),
            field: 'firstname',
            allowNull: true,
        },
        middlename: {
            type: DataTypes.STRING(50),
            field: 'middlename',
            allowNull: true,
        },
        lastname: {
            type: DataTypes.STRING(50),
            field: 'lastname',
            allowNull: true,
        },
   })
    return Person;
};

person.controller.js

const person = require("../models/person.model.js").Person;

module.exports = {
    
    getPersons(req, res) {
        person.findAll({
            where: { isActive : 1 },
            
        }).then(person => {
            res.status(201).json({
                person: person,
                success: true,
                message: "get person request successful."
            });
        }).catch(error => {
            console.error("get person request failed: ", error);
            res.status(500).send({
                success: false,
                message: "get person request failed: " + error
            });
        })
    }


};

index.js

const person = require("../controllers/person.controller.js");

module.exports = app => {
    app.get("/api", (req, res) =>
        res.status(200).send({
            message: "Welcome to my API!",
        })
    );

    // ========================= Person Routes ========================= //
    app.get("/api/person/get", person.getPersons);



};

server.js

const express = require("express");
const bodyParser = require("body-parser");
const app = express();

require("./routes/index.js")(app);
app.get("*", (req, res) => {
    res.status(404).send({
        status: false,
        message: "No matching route!"
    });
});

//PORTS
const port = process.env.PORT || 3000;

// set port, listen for requests
app.listen(port, () => {
  console.log(`Server is running on port ${port}.`);
});

【问题讨论】:

  • 你从哪里得到文件中sequelize, DataTypes的值:person.model.js
  • 它在我的 config.js 文件中,感谢您指出这一点,因为这可能解决了我的问题,因为我错过了它。我会在几分钟后报告。

标签: javascript node.js express sequelize.js


【解决方案1】:

您应该在使用它们之前注册所有模型及其关联。您应该从 Sequelize 实例或保存所有已注册模型的对象中使用它们。

关于如何注册所有模型和关联,请参阅我的回答 here

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 2017-11-02
    • 2018-11-30
    • 2018-05-15
    相关资源
    最近更新 更多