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

时间:2016-01-14 17:28:22

标签: javascript node.js express sequelize.js

  

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']});
};

5 个答案:

答案 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)

当关系或关联没有用数据库连接定义时,你可能会遇到这个问题。