2013-02-16 175 views
1

我想分配预处理器的猫鼬保存事件和加密文件:如何保存之前更改使用前将文档保存在猫鼬

userShecma.pre('save', function(next) { 
    var self = {}; 
    self.Key = this.password;; 
    self.EncriptedString = encrypt.encrypt(JSON.stringify(this), this.password); 
    self.user = this.user 
    self.decrypt = function() { 
     var user = JSON.parse(encrypt.decrypt(this.EncriptedString, this.Key)); 
     for(var key in user) { 
      this[key] = user[key]; 
     } 
    } 
    for(var key in this){ 
     delete this[key]; 
    } 
    for(var key in self){ 
     this[key] = self[key]; 
    } 
    console.log(this); 
    next(self); 
}); 

我已经尝试了一堆不同势的事情,有时我收到一个错误,有时它不会更改文档。

让我知道如果你需要任何更多的信息,
阿里

编辑:尝试Benoir的回答,我不能编辑this

回答

1

我想通了: Benoir的答案+您不能添加或删除文件中属性/除非它们被定义在Schema中。

+0

您可以使用this.getValue和this.setValue编辑未在Schema中定义的属性 – 2013-06-01 20:23:33

2

我相信调用next(self)会使下一个处理程序认为出现错误并且不保存文档。

你应该只调用next()

http://mongoosejs.com/docs/middleware.html 下的“错误处理”

+1

不回答问题,问题是如何编辑文档 – 2013-02-16 21:54:17

+1

您可以通过编辑“this”属性来编辑文档。我认为你这样做是正确的,但不更新的原因是你将错误传递给'next',所以它不会保存 – Benoir 2013-02-16 21:55:49