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)
另请查看我的另一个 以更好地了解如何注册模型及其关联
我正在构建一个项目,该项目使用 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)
另请查看我的另一个