2016-11-20 39 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

相關問題