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)的主要内容,如果未能解决你的问题,请参考以下文章
(Discord.js)TypeError:无法读取未定义的属性“添加”
如何使用自定义错误消息捕获“TypeError:无法读取未定义的属性(读取'0')”?