TypeError: sequelize.define is not a function

TypeError: sequelize.define is not a function

我正在构建一个项目,该项目使用 SQL 作为数据库,使用 node,express 和 sequelize 作为后端。

我正在尝试为我的项目使用 sequelize,但 运行 出现“类型错误:sequelize.define 不是函数”。

我不确定问题出在哪里,我查看了其他帖子并进行了各种更改,但没有成功。

第一个错误从定义开始。

错误:

userModel.js:4
  const User = sequelize.define('user', {

我的dbConfig.js文件

module.exports = {
  HOST: 'localhost',
  USER: 'placeholder',
  PASSWORD: 'placeholder',
  DB: 'placeholder',
  dialect: 'mysql',

  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  }
}

我的 index.js 在我的模型文件夹中

const dbConfig = require('../config/dbConfig.js')

const { Sequelize, DataTypes } = require('sequelize')

const sequelize = new Sequelize(
  dbConfig.DB,
  dbConfig.USER,
  dbConfig.PASSWORD, {
    host: dbConfig.HOST,
    dialect: dbConfig.dialect,
    operatorsAliases: false,

    pool: {
      max: dbConfig.pool.max,
      min: dbConfig.pool.min,
      acquire: dbConfig.pool.acquire,
      idle: dbConfig.pool.idle
    }
  }
)

sequelize.authenticate()
  .then(() => {
    console.log('Connected...')
  })
  .catch(err => {
    console.log(`Error ${err}`)
  })

const db = {}

db.Sequelize = Sequelize
db.sequelize = sequelize

// ----- Put tables models here -----
// This maps the tables to object
db.users = require('./userModel.js')(Sequelize, DataTypes)

// ----- IMPORTANT -----
// If force = true, everytime the server runs we will lose the data for the table
// force = true recreates a table
db.sequelize.sync({ force: false })
  .then(() => {
    console.log('Re-sync done')
  })

module.exports = db

我的userModel.js文件

// DataTypes Documentation - https://sequelize.org/master/variable/index.html#static-variable-DataTypes

module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('user', {
    userID: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    userName: {
      type: DataTypes.STRING
    },
    password: {
      type: DataTypes.STRING
    },
    firstName: {
      type: DataTypes.STRING
    },
    lastName: {
      type: DataTypes.STRING
    },
    phoneNumber: {
      type: DataTypes.STRING
    },
    emergencyContact: {
      type: DataTypes.STRING
    },
    verified: {
      type: DataTypes.BOOLEAN
    }
  })

  return User
}

我的 app.js 服务器启动的文件

const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
const morgan = require('morgan') // shows which device or browser access
const PORT = process.env.PORT || 8081

const app = express() // builds express server for API.

// Middle Ware
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.use(morgan('combined'))
app.use(bodyParser.json()) // allows app to easily parse JSON request.
app.use(cors()) // to allow any host or client to access the server.

// ----- Routers -----
const router = require('../routes/userRouter.js')
app.use('/api/users', router)

app.listen(PORT, () => {
  console.log(`Server started on port ${PORT}`)
})

您应该在 Sequelize 实例上而不是在 Sequelize 本身上调用 define:

db.users = require('./userModel.js')(sequelize, DataTypes)

另请查看我的另一个 以更好地了解如何注册模型及其关联