2014-07-07 2 views
1

내 모델 :sequelize + dataInsert

사용자 : 난에 데이터를 삽입해야이 모델에서

var bcrypt = require('bcrypt'), 
    crypto = require('crypto'); 

var authTypes = ['github', 'twitter', 'facebook', 'google']; 

var map_attributes = function() { 
    var obj = new Object(), 
     ctx = this; 
    ctx.attributes.forEach(

    function(attr) { 
     obj[attr] = ctx[attr]; 
    }); 
    return obj; 
}; 

var validatePresenceOf = function(value) { 
    return value && value.length; 
}; 

module.exports = function(sequelize, DataTypes) { 
    return sequelize.define('user', { 
     name: { 
      type: DataTypes.STRING, 
      validate: { 
       len: { 
        args: 1, 
        msg: "Name cannot be blank" 
       } 
      } 
     }, 
     email: { 
      type: DataTypes.STRING, 
      validate: { 
       len: { 
        args: 1, 
        msg: "email cannot be blank" 
       } 
      } 
     }, 
     username: { 
      type: DataTypes.STRING, 
      validate: { 
       len: { 
        args: 1, 
        msg: "username cannot be blank" 
       } 
      } 
     }, 
     provider: DataTypes.STRING, 
     //hashed_password: String, 
     hashed_password: { 
      type: DataTypes.STRING, 
      set: function(v) { 
       var salt = bcrypt.genSaltSync(10); 
       var hash = bcrypt.hashSync(v, salt); 
       this.setDataValue('hashed_password', hash); 
      } 
     }, 
     salt: DataTypes.STRING, 
     /*facebook: {}, 
    twitter: {}, 
    github: {}, 
    google: {}*/ 
    }, { 
     hooks: { 
      beforeValidate: function(next) { 
       if (!this.isNew) return next(); 
       if (!validatePresenceOf(this.password) && authTypes.indexOf(this.provider) === -1) next(new Error('Invalid password')); 
       else next(); 
      } 
     } 
    }, { 
     instanceMethods: { 
      authenticate: function(plainText) { 
       return this.encryptPassword(plainText) === this.hashed_password; 
      }, 
      makeSalt: function() { 
       return Math.round((new Date().valueOf() * Math.random())) + ''; 
      }, 
      encryptPassword: function(password) { 
       if (!password) return ''; 
       return crypto.createHmac('sha1', this.salt).update(password).digest('hex'); 
      } 
     } 
    }); 

} 

어떻게 할 수 있니? 나는이 튜토리얼 http://sequelizejs.com/docs/1.7.8/instances을 발견했다. 그러나 그것과 나의 디자인은 다르다, 내가 총 모델을 내보내고있다. 사전에 감사한다.

나는 이것을 시도 :

하는 index.js :

var Sequelize = require('sequelize'); 
var util = require('util'); 
var config = require('config').dbpostgres; // we use node-config to handle environments 

// initialize database connection 
var sequelize = new Sequelize(
config.dbname, 
config.username, 
config.password, { 
    dialect: 'postgres' 
}); 

//var sequelize = new Sequelize('postgres://postgres:[email protected]:5432/Geocode', { dialect: 'postgres', protocol: 'postgres' }); 

// load models 
var models = ['user'] //,'sciSphereModel', 'access_token', 'oauth_client', 'request_token', 'article']; 

models.forEach(function(model) { 
    //console.log(model) 
    var sequelizeModel = sequelize.import(__dirname + '/' + model); 
    //console.log("seq=" + util.inspect(sequelizeModel)); 
    //sequelizeModel.sync(); 
    /*sequelizeModel.sync().success(function() { 
      console.log('DB error'); 
     }).error(function(error) { 
      console.log(error); 
     })*/ 

    sequelizeModel.sync(); 

    //console.log("sequelizeModel=" + util.inspect(sequelizeModel)) 
    var user = sequelizeModel.build({ 
     name: 'kumar', 
     email: '[email protected]', 
     username: 'kumar007', 
     provider: 'local', 
     hashed_password: 'tyegnaak', 
     salt: 'uopioann' 
    }) 


    user.save().complete(function(err) { 
     console.log("Inside user save"); 
     if (!! err) { 
      console.log('The instance has not been saved:', err) 
     } 
     else { 
      console.log('We have a persisted instance now') 
     } 
    }) 
    module.exports[model] = sequelizeModel; //Implement sync 
}); 
// export connection 
//sequelize.sync(); 
module.exports.sequelize = sequelize; 
app.set('sequelize', sequelize); 

을 내가 잘하고 있는가 여부 .is는이 방법이를 달성하기 위해?

답변

0

sequelize.sync(); 아니요 sequelizeModel.sync(); 아니겠습니까? 모델 변경 사항을 db와 동기화하려는 경우. 표가 모델과 일치하지 않을 경우를 대비하여 동기화를 추가 할 수도 있습니다.

sequelize.sync({ force: true }); // use to drop before create

나는, 모델에 불과 create(), save(), find(), updateAttributes() 등을 동기화를 해본 적이