TypeError: 無法讀取 undefined (expressjs) 的屬性 'findAll'

TypeError: Cannot read property 'findAll' of undefined (expressjs)

本文关键字:findAll expressjs undefined TypeError      更新时间:2023-09-26

TypeError: 無法讀取 undefined (expressjs) 的屬性 'findAll'。

所有功能(续集)都不起作用。所有错误:无法读取属性"续集方法"...

module.exports = function (sequelize, DataTypes) {
var User = sequelize.define('user', {
    email: {type: DataTypes.STRING(32), unique: true, allowNull: false},
});
return User;
};

控制器:

models  = require('./../models');
exports.index = function (request, response, next) {
    models.User.findAll({attributes: ['id', 'username']});
};

我遇到了同样的问题,下面的更改对我有用。这可能对未来的用户有用 -

当您使用续集模型时,您需要使用定义的模型类名称,即 findAll 行中的"user"而不是"User":

models  = require('./../models');
exports.index = function (request, response, next) {
    models.user.findAll({attributes: ['id', 'username']});
};

"用户"是为其分配续集定义的变量,并且在该模型定义之外无法识别。"user"是正在创建的表名以及续集模型类名,这需要在任何类型的数据库查询中使用。

您已经创建了两个续集实例。一个在模型/索引中.js在第 12/14 行中,第二个实例在第 19 行的服务器脚本中。你开始第二个实例,但在模型中你尝试使用第一个实例。

您的模型/索引.js文件正常。在服务器文件中添加

var database = require('path/to/models');

将数据库开始更改为:

database.sequelize .authenticate() .then(function(err) { console.log('Connection has been established successfully.'); }, function (err) { console.log('Unable to connect to the database:', err); });

并且您必须将"数据库"对象传递给控制器而不是models = require('./../models');并且您可以从控制器访问模型:database.User

你的model/index.js看起来不错。在您的控制器中尝试findAll()方法sequelize.sync().then(function () {

这是我解决问题的方法

注意:我里面没有models/index.js,而是有一个类似的db.js文件 具有数据库连接脚本和续集对象的配置文件夹。

我的用户控制器.js将看起来像(工作代码):

var db = require('./../config/db'),
seq = db.seq,
Sequelize = db.Sequelize;
module.exports = function(app) {
    app.get('/getUsers',function(req,res){
        var Users = require('../models/UserModel')(app); //since i am binding to a single object - app
        seq.sync().then(function () {
            Users.findAll({
               attributes: ['usr_code', 'usr_name']
           }).then(function (users) {
                    users.forEach(function(user,index,arr){
                        console.log(user.usr_code);
                    });
                });
        });
    });
}

希望这对你有帮助。 :)

我也有同样的问题,您需要检查您的表名就是这样。

当关系或关联未使用 DB 连接定义时,您可能会遇到此问题。

此错误是因为您打算在控制器完全连接到数据库之前在控制器中使用 Sequelise。

尝试使用 .then 或异步等待

几分钟

前我刚刚遇到了同样的问题。

这就是我导入模型的方式:

const {product: Product, cartItem: CartItem} = require('../models');