Mongoose ODM, изменение переменных перед сохранением

Я хочу создать модельный слой с Mongoose для моих пользовательских документов, который:

  • валидация (уникальная, длина)
  • canonicalisation (имя пользователя и адрес электронной почты преобразуются в строчные буквы для проверки уникальности)
  • генерация соли
  • хеширование паролей
  • (каротаж)

Все эти действия необходимо выполнить перед тем, как продолжить работу с db. К счастью, mongoose поддерживает проверку, плагины и промежуточное ПО.

Плохо то, что я не могу найти хороший материал по этому вопросу. Официальные документы на mongoosejs.com слишком короткие...

Есть ли у кого-нибудь пример о предварительных действиях с Mongoose (или полный плагин, который делает все, если он существует)?

Привет

Ответ 1

В вашей функции Schema.pre('save', callback) this - это сохраненный документ и внесенные в него изменения перед вызовом next() изменить то, что было сохранено.

Ответ 2

Другой вариант - использовать Getters. Вот пример с сайта:

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

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

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

Ответ 3

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);