2016-11-20 58 views
0

我试图用sequelize找到我的数据库中的记录,但我发现了这一点:类型错误:无法读取sequelize模型属性“发现”的不确定

.find({ where: { name: email } }) 
TypeError: Cannot read property 'find' of undefined 

这是我的模型/ index.js

var Sequelize = require('sequelize') 
    , sequelize = new Sequelize(process.env.MYSQL_DB, process.env.MYSQL_USER, process.env.MYSQL_PASSWORD, { 
     dialect: "mysql", // or 'sqlite', 'postgres', 'mariadb' 
     port: 3306, // or 5432 (for postgres) 
}); 

// load models     
var models = [     
    'user',    
]; 

models.forEach(function(model) { 
    module.exports[model] = sequelize.import(__dirname + '/' + model); 
}); 

这是我的模型/ user.js的

var Sequelize = require("sequelize"); 

module.exports = function(sequelize, DataTypes) { 
    var User = sequelize.define("User", { 
    email: DataTypes.STRING, 
    password: DataTypes.STRING, 
    token: DataTypes.STRING 
    }, { 
    tableName: 'users' 
    } 

); 

    return User; 
}; 

这是我如何导入用户模型在我的文件:

var User = require('../models/user').User; 

编辑

我试图使用用户创建与护照本地注册。 我在配置主叫用户/ passport.js

var LocalStrategy = require('passport-local').Strategy; 
var SlackStrategy = require('passport-slack').Strategy; 
var User = require('../models').User; 
var mysql = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : process.env.MYSQL_HOST, 
    user  : process.env.MYSQL_USER, 
    password : process.env.MYSQL_PASSWORD, 
    database : process.env.MYSQL_DB 
}); 

module.exports = function(passport) { 
    // used to serialize the user for the session 
    passport.serializeUser(function(user, done) { 
     console.log("abc serializeUser"); 
     console.log(user); 
     done(null, user.id); 
    }); 

    passport.deserializeUser(function(id, done) { 
     console.log("abc deserializeUser"); 
     User.findById(id).then(function(user){ 
      done(null, user); 
     }).catch(function(e){ 
      done(e, false); 
     }); 
    }); 

    passport.use('local-signup', new LocalStrategy(
     { 
      // by default, local strategy uses username and password, we will override with email 
      usernameField : 'name', 
      passwordField : 'password', 
      passReqToCallback : true // allows us to pass back the entire request to the callback 
     }, 

     function(req, email, password, done) 
     { 

      process.nextTick(function() { 

       User 
        .find({ where: { name: email } }) 
        .then(function(err, user) { 
         if (!user) { 
          console.log('No user with the username "john-doe" has been found.'); 
         } else { 
          console.log('Hello ' + user.name + '!'); 
          console.log('All attributes of john:', user.get()); 
         } 
        }); 


     }   
    )); 


    passport.use('slack', new SlackStrategy({ 
     clientID: process.env.SLACK_ID, 
     clientSecret: process.env.SLACK_SECRET, 
     scope: "users:write" 
    }, 
     function(accessToken, refreshToken, profile, done) { 
      User.findOrCreate({ SlackId: profile.id }, function (err, user) { 
       return done(err, user); 
      }); 
     } 
    )); 

}; 
+0

你可以在'.find'附近看到更多的代码,比如你使用什么对象,以及如何获得这个对象? – drinchev

+0

@drinchev我编辑了这个问题。你可以检查一下吗? –

回答

1

你应该让你的User模型后sequelize的import方法做它的工作。

所以你的情况,你应该做的:

var User = require('../models/index').User; 

这应该工作。

+0

谢谢,错误消失了,但注册表单还没有正常工作 –

+0

您应该问另一个问题。这很难遵循,因为没有错误等。 – drinchev

相关问题