2015-01-10 41 views
1

谁能告诉我如何将从MongoDB检索的文档转换为我自己创建的类?我不想用猫鼬,我使用github.com/christkv/mongodb-legacy v2.0.13将MongoDB文档强制类型化

文档的值从MongoDB的

{ 
    id { MongoDb ID}, 
    email: '[email protected]', 
    passwordHash: '$2a$04$Wjan4CloaZRYj60MGsDb6e7x11e1QYkjW3N2q5JYBDaKBNipLti36', 
    passwordSalt: '$2a$04$Wjan4CloaZRYj60MGsDb6e', 
    id: 'mrpmorris' 
} 

返回未能执行代码

var user = Object.create(User.prototype, document) 

抛出

TypeError: Property description must be an object: $2a$04$Wjan4CloaZRYj60MGsDb6e 
    at defineProperties (native) 
    at Function.create (native) 

User类的异常

var assert = require('assert') 
var bcrypt = require('bcrypt') 

var User = (function() { 
    function User() { 
     this.passwordSalt = "hello" 
    } 

    User.prototype.constructor = User 
    User.prototype.setPassword = function (newPassword, callback) { 
     var self = this 
     assert.ok(newPassword != null, "newPassword cannot be null") 
     assert.ok(newPassword.length >= 8) 
     bcrypt.genSalt(2, function (err, salt) { 
      self.passwordSalt = salt 
      bcrypt.hash(newPassword, salt, function (err, hash) { 
       self.passwordHash = hash 
       callback(err); 
      }) 
     }); 
    } 

    User.prototype.checkPassword = function (password, callback) { 
     var self = this 
     bcrypt.hash(self.passwordHash, self.passwordSalt, function (err, hash) { 
      callback(err, hash === self.passwordHash) 
     }) 
    } 


    return User 
})() 

exports.User = User 
+1

为什么不把用户文档作为构造函数中的参数? – cbass

回答

3

你得到一个错误,因为Object.create预期性描述符作为其第二个参数,某事像

var doc = { 
    email: '[email protected]', 
    passwordHash: '$2a$04$Wjan4CloaZRYj60MGsDb6e7x11e1QYkjW3N2q5JYBDaKBNipLti36', 
    passwordSalt: '$2a$04$Wjan4CloaZRYj60MGsDb6e', 
    id: 'mrpmorris' 
}; 

var user = Object.create(User.prototype, { 
    // regular 'value property' 
    email:  { writable: true, configurable: true, value: doc.email  }, 
    passwordHash: { writable: true, configurable: true, value: doc.passwordHash }, 
    passwordSalt: { writable: true, configurable: true, value: doc.passwordSalt }, 
    id:   { writable: true, configurable: true, value: doc.id   } 
}); 

请参考MDN的细节

另外,作为@cbass建议,你可能将mongo文件对象传递给User构造函数

function User(doc) { 
    this.id = doc.id; 
    this.email = doc.email; 
    this.passwordHash = doc.passwordHash; 
    this.passwordSalt = doc.passwordSalt; 
} 
//... 
var user = new User(doc); 
+0

感谢您的全面回答!我已决定取消选择我的模型,并创建对文档执行操作的函数 –