[英]Why does sequelize not recognize the Model? TypeError: Cannot read properties of undefined (reading 'findAll')
所以我正在學習 MySQL 的 sequelize,我有幾個例子可以說明它應該如何完成,但是這個錯誤仍然存在,好像 sequelize 無法使用 model 中的函數。我只是找不到為什么它不是工作,有幫助嗎?
這是終端中顯示的錯誤,它指向 productController line 8: TypeError: Cannot read properties of undefined (reading 'findAll')
這是我的 Index.js:
'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.js')[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = require(path.join(__dirname, file));(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
這是表 Model:
module.exports = (sequelize, DataTypes) => {
let alias = 'Product';
let atributes = {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
}
let config = {
tableName: 'products',
timestamps: false
}
const Product = sequelize.define(alias, atributes, config);
return Product
}
而這個 productController.js:
const db = require('../../models/Index');
const sequelize = db.sequelize;
const productsController = {
'shopRender' : (req, res) => {
// res.send('hola mundo');
db.Product.findAll()
.then(function(productos) {
res.send("hola mundo");
})
}
}
module.exports = productsController;
我試過將 productController 中的 db 解構為 Product,使用大寫,非大寫,使用表名......
起作用的是嘗試在 shopRender function 中顯示一些內容,但是一旦我嘗試使用 model 進行查詢並嘗試訪問路由,就會出現錯誤。
事實證明,嘗試使用res.send(Object.keys(db))
調試打印["undefined","","sequelize","Sequelize"]
在 productController.js 上試試這個,我希望它有所幫助。
const db = require('../../models').sequelize.models;
const productsController = {
'shopRender' : (req, res) => {
// res.send('hola mundo');
db.Product.findAll()
.then(function(productos) {
res.send("hola mundo");
})
}
}
module.exports = productsController;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.