TypeError:无法读取未定义的属性“findAll”(expressjs)

Posted

技术标签:

【中文标题】TypeError:无法读取未定义的属性“findAll”(expressjs)【英文标题】:TypeError: Cannot read property 'findAll' of undefined (expressjs) 【发布时间】:2016-04-20 03:42:48 【问题描述】:

TypeError:无法读取未定义(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']);
;

【问题讨论】:

请写你的./../models/index.js的内容,或者如果你以非标准方式初始化模型,请改写。 @KrzysztofSztompka, pastebin.com/Ev5Mp2AD 谢谢,请写下你是如何运行db的 @KrzysztofSztompka, app.js pastebin.com/xwNV1Hmu 【参考方案1】:

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

当你使用sequelize模型时,你需要使用定义好的模型类名,在findAll行中是“user”而不是“User”:

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

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

【讨论】:

【参考方案2】:

您已经创建了两个 sequelize 实例。第 12/14 行的 models/index.js 中的一个和第 19 行的服务器脚本中的第二个实例。然后您启动了第二个实例,但在模型中您尝试使用第一个实例。

你的 model/index.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

【讨论】:

嗯,ReferenceError:exports.index (c:\webserver\data\htdocs\newcloudy\controllers\user.js:5:5) pastebin.com/tS89jbBp 中未定义数据库 如何将数据库对象从服务器脚本传递到控制器?好像有点问题 var database = require('./../app.js');和 TypeError:无法读取未定义的属性“findAll”。 不,你不能那样做。您在服务器脚本中运行控制器。您必须在服务器脚本中将数据库实例传递给您的控制器。请检查此***.com/a/33096610/4138339 和“第二次编辑”。【参考方案3】:

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

这是我解决问题的方法

nb:我在里面有一个类似的 db.js 文件,而不是 models/index.js config 文件夹,其中包含 dbconnection 脚本和 sequelize 对象。

我的 userController.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);
                    );
                );
        );
    );


希望这对您有所帮助。 :)

【讨论】:

【参考方案4】:

我也有同样的问题,你需要检查你的表名。

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于TypeError:无法读取未定义的属性“findAll”(expressjs)的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法读取未定义的属性(读取“公会”)

(Discord.js)TypeError:无法读取未定义的属性“添加”

如何使用自定义错误消息捕获“TypeError:无法读取未定义的属性(读取'0')”?

TypeError:无法读取未定义的属性(读取“名称”)

TypeError:无法读取未定义的属性“findAll”(expressjs)

TypeError:无法读取未定义的属性(读取“问题”)