22

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

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

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

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

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

问候

4

3 回答 3

35

在您的Schema.pre('save', callback)函数中,this是否正在保存文档,以及在调用next()更改保存的内容之前对其进行的修改。

于 2012-07-04T14:48:36.907 回答
29

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

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

var UserSchema = new Schema({
  email: { type: String, set: toLower } 
});

https://mongoosejs.com/docs/tutorials/getters-setters.html

于 2012-07-05T07:13:25.337 回答
17
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);
于 2013-06-05T13:49:13.727 回答