TypeError:无法读取undefined(expressjs)的属性'findAll'。
所有功能(续集)都不起作用。所有错误:无法读取属性'sequelize method'...
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']});
};
答案 0 :(得分:6)
我遇到了同样的问题,下面的更改对我有用。这可能对将来的用户有用 -
当你使用sequelize模型时,你需要使用定义的模型类名,即" user"而不是"用户"在线查找所有:
models = require('./../models');
exports.index = function (request, response, next) {
models.user.findAll({attributes: ['id', 'username']});
};
"用户"是一个变量定义所分配的变量,它在模型定义之外无法识别。 "用户"是要创建的表名以及sequelize模型类名,这需要在任何类型的db查询中使用。
答案 1 :(得分:3)
您已创建了两个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
答案 2 :(得分:1)
你的model/index.js
看起来不错。在您的控制器中,尝试findAll()
sequelize.sync().then(function () {
方法
以下是我解决问题的方法
nb:而不是
models/index.js
我内部有一个类似的db.js
文件 配置文件夹,其中包含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);
});
});
});
});
}
希望这会对你有所帮助。 :)
答案 3 :(得分:0)
我也遇到了同样的问题,你需要检查你的表名。
答案 4 :(得分:0)
当关系或关联没有用数据库连接定义时,你可能会遇到这个问题。