mysql - Sequelize model.create 不是函数

标签 mysql node.js sequelize.js

我是 Sequelize 的新手,并试图为我的新项目进行设置。我检查了一些答案,但无法克服我的错误。有人可以指出如何解决这个问题。
模型/index.js

// Database service
// Connects to the database
const { Sequelize } = require('sequelize');
const path = require('path');


const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
    host: process.env.DB_HOST,
    dialect: 'mysql',
    logging: process.env.QUERY_LOGGING == "true" ? console.log : false,
    pool: {
        max: 10,
        min: 0,
        acquire: 30000,
        idle: 10000
      }
});


module.exports = sequelize
模型/用户.js
const sequelize = require("./index")
module.exports = (sequelize, DataTypes) => {
    const User = sequelize.define('Users', {
        id: {
            type: DataTypes.INTEGER,
            primaryKey: true,
            autoIncrement: true
          },
        firstName: {
             type: DataTypes.STRING,
              allowNull: false
         },
        lastName: {
             type: DataTypes.STRING
        },
        profileURL: {
             type: DataTypes.STRING
        },
        emailId: {
             type: DataTypes.STRING,
             allowNull: false 
        },
        passwordHash: {
             type: DataTypes.STRING,
            allowNull: false
        },
        street: {
             type: DataTypes.STRING
        },
        city: {
             type: DataTypes.STRING,
             allowNull: false 
        },
        phone: {
             type: DataTypes.STRING 
        },
        newsletter: {
             type: DataTypes.STRING
         },
        visibility: {
             type: DataTypes.BOOLEAN,
             defaultValue: true
        },

    },{
    });
    return User;
};
最后,我在我的服务文件中导入 User 模型,如下所示:

const User = require("../models/users")

const createUser = async(req) => {
    const {firstName, lastName, profileURL, emailId, passwordHash, street, city, phone, newsletter, visibility} = req.body
    const user = await User.create({
        firstName, 
        lastName,
        profileURL, 
        emailId,
        passwordHash,
        street,
        city,
        phone,
        newsletter,
        visibility     
    })
    console.log("new user==>>", user)
    return
}

module.exports = { createUser }

但是,我收到以下错误。TypeError: User.create is not a function有人可以指出我可能做错了什么吗?我意识到这可能是小事。
谢谢

最佳答案

您导出一个注册 User 模型而不是模型本身的函数。所以你只需要通过 sequelize 实例和 DataTypes 调用它,比如 database.js 你将在其中注册所有模型及其关联或直接在 models/index.js 中:

const UserModelConstructor = require("../models/users")
const { DataTypes } = require("sequelize");
...
const UserModel = UserModelConstructor(sequelize, DataTypes);

module.exports = {
  sequelize,
  User: UserModel
}
您可以在我的另一个答案 here 中查看如何注册多个模型和关联
请不要忘记删除此行
const sequelize = require("./index")
来自 models/users.js

关于mysql - Sequelize model.create 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67392366/

相关文章:

node.js - 使用 Prisma 进行深度嵌套事务写入

mysql - 如何模拟mysql数据库?

php - html5地理位置和地址

javascript - Typescript 找不到导入的模块

node.js - 使用 NodeJs 中的回调来实现 MongoDB 4.0 的事务?

mysql - 在单独的文件中定义 sequelize 关联

php - "INSERT INTO"不工作

Mysql查询使用数据透视表

node.js - 如何测试nodejs并发请求

node.js - 序列化迁移 : Adding a foreign key constraint to a column on same table