使用Sequelize的create方法时出现TypeError错误求助
Sequelize create方法报错:TypeError: Cannot read properties of undefined (reading 'create')
错误信息
TypeError: Cannot read properties of undefined (reading 'create')
相关代码
Signup.js
const express = require('express') const router = express.Router() const {models: { Employees } } = require('../models') // const Employees = require('../models/Employees')(sequelize, DataTypes); // const Employees = require('../models/Employees').Employees; router.get('/', async (req, res) => { const employees = await Employees.findAll() res.json(employees) }) router.post('/', async(req, res)=>{ const employee = req.body await Employees.create(employee) res.json(employee) }) module.exports = router
Employees 模型文件
const {sequelize, DataTypes} = require("sequelize"); module.exports = (sequelize, DataTypes) => { const Employees = sequelize.define("Employees", { firstname: DataTypes.STRING, middlename: DataTypes.STRING, lastname: DataTypes.STRING, email: DataTypes.STRING, phoneNo: DataTypes.INTEGER, password: DataTypes.STRING, department: DataTypes.STRING, }) return Employees }
models/index.js
const dbConfig = require('../config/db.config') const { Sequelize } = require('sequelize') const sequelize = new Sequelize(dbConfig.DATABASE, dbConfig.USER, dbConfig.PASSWORD, { host: dbConfig.HOST, dialect: dbConfig.DIALECT }) const db = {}; db.sequelize = sequelize; db.models = {}; db.models.Emmployees = require('./Employees')(sequelize, Sequelize.DataTypes); db.models.Assets = require('./Assets')(sequelize, Sequelize.DataTypes); module.exports = db
问题分析与解决方案
核心问题
models/index.js中存在拼写错误:db.models.Emmployees多写了一个字母m,正确名称应为db.models.Employees。这导致你在Signup.js中解构导入的Employees变量为undefined,调用create方法时触发报错。
解决步骤
修正models/index.js的拼写错误
将:db.models.Emmployees = require('./Employees')(sequelize, Sequelize.DataTypes);修改为:
db.models.Employees = require('./Employees')(sequelize, Sequelize.DataTypes);保持正确的导入方式
继续使用Signup.js中的解构导入即可:const {models: { Employees } } = require('../models')你尝试的另外两种导入方式无效的原因:
- 第一种方式需要传入
sequelize和DataTypes实例,但Signup.js中没有这两个变量,直接调用会报错 - 第二种方式错误,因为Employees模型文件导出的是一个函数,不是包含
Employees属性的对象,无法通过.Employees获取
- 第一种方式需要传入
可选导入方式
也可以直接从db对象中获取模型:const db = require('../models'); const Employees = db.models.Employees;
内容的提问来源于stack exchange,提问作者Dagim Debebe
相关产品推荐
相关产品推荐

