TypeError: Cannot read property 'findAll' of undefined (expressjs)

一笑奈何 提交于 2020-01-13 05:09:31

问题


TypeError: Cannot read property 'findAll' of undefined (expressjs).

All functions (sequelize) are not working. All errors: Cannot read property 'sequelize method' ...

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

return User;
};

Controller:

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

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

回答1:


I had the same issue, and the changes below worked for me. This might be useful for future users -

when you use the sequelize model you need to use the defined model class name, which is "user" instead of "User" in line findAll:

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

The "User" is a variable to which the sequelize definition is assigned and its not recognized outside that model definition. The "user" is the table name that is getting created as well as the sequelize model class name, and this needs to be used in any type of db query.




回答2:


You have created two instances of sequelize. One in models/index.js in line 12/14 and second instance in server script in line 19. And you start second instance, but in model you tried to use first instance.

Your model/index.js file is ok. In your server file add

var database = require('path/to/models');

change your db start to:

database.sequelize .authenticate() .then(function(err) { console.log('Connection has been established successfully.'); }, function (err) { console.log('Unable to connect to the database:', err); });

And you have to pass 'database' object to your controllers instead of models = require('./../models'); and from your controllers you have access to your model : database.User




回答3:


Your model/index.js looks fine. In your controller try findAll() method inside sequelize.sync().then(function () {

Here is my approach to the problem

nb: instead of models/index.js i have a similar db.js file inside config folder which having the dbconnection scripts and sequelize object.

My userController.js will look like (working code) :

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

}

Hope this helps you. :)



来源:https://stackoverflow.com/questions/34795953/typeerror-cannot-read-property-findall-of-undefined-expressjs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!