簡體   English   中英

為什么 sequelize 不識別 Model? 類型錯誤:無法讀取未定義的屬性(讀取“findAll”)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM