Mongoose ODM,在保存之前更改变量

dev*_*pus 17 mongoose node.js express odm

我想为我的用户文档创建一个带有Mongoose的模型层,它可以:

  1. 验证(唯一,长度)
  2. 规范化(用户名和电子邮件转换为小写以检查唯一性)
  3. 盐生成
  4. 密码哈希
  5. (记录)

在持久化到db之前,需要执行所有这些操作.幸运的是,mongoose支持验证,插件和中间件.

不好的是我找不到关于这个问题的任何好材料.mongoosejs.com上的官方文档太短了......

有没有人有一个关于Mongoose预处理的例子(或一个完整的插件,如果它存在的话)?

问候

Joh*_*yHK 33

在您的Schema.pre('save', callback)函数中,this文档是否被保存,并在调用之前对其进行了next()修改.


ben*_*nto 18

另一种选择是使用Getters.这是网站上的一个例子:

function toLower (v) {
  return v.toLowerCase();
}

var UserSchema = new Schema({
  email: { type: String, set: toLower } 
});
Run Code Online (Sandbox Code Playgroud)

http://mongoosejs.com/docs/getters-setters.html

  • 值得注意的是,如果您传递的值与模式中为指定属性定义的类型不同,则这是唯一的选项。例如 你有一个 `number` 类型的 `amount` 属性,但你传入用于处理的值是一个 `string`。 (2认同)

Ric*_*aca 15

var db = require('mongoose');
var schema = new db.Schema({
  foo:     { type: String }
});

schema.pre('save', function(next) {
  this.foo = 'bar';

  next();
});

db.model('Thing', schema);
Run Code Online (Sandbox Code Playgroud)