TypeError:无法读取undefined(expressjs)的属性'findAll'

Des*_*ogo 3 javascript node.js express sequelize.js

TypeError:无法读取undefined(expressjs)的属性'findAll'.

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

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

return User;
};
Run Code Online (Sandbox Code Playgroud)

控制器:

models  = require('./../models');

exports.index = function (request, response, next) {
    models.User.findAll({attributes: ['id', 'username']});
};
Run Code Online (Sandbox Code Playgroud)

小智 7

我有同样的问题,下面的更改对我有用.这可能对将来的用户有用 -

当你使用sequelize模型时,你需要使用定义的模型类名,即"user"而不是"find"中的"User":

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

"用户"是分配了续集定义的变量,并且在该模型定义之外无法识别."user"是要创建的表名以及sequelize模型类名,这需要在任何类型的db查询中使用.


Krz*_*pka 4

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

您的 model/index.js 文件没问题。在您的服务器文件中添加

var database = require('path/to/models');
Run Code Online (Sandbox Code Playgroud)

将您的数据库开始更改为:

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