Мангуст "сеттер", действующий как "геттер"? - PullRequest
4 голосов
/ 17 июля 2011

Использование Mongoose с MongoDB и Node.js

Ранее моя UserSchema определялась так:

var UserSchema = new Schema({
  username:     { type: String, unique: true },
  password:     String,
  email:        { type: Email, unique: true, validate:/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ }
});

Когда мой пользователь был создан, я зашифровал пароль. Затем я узнал о " setters " и изменил свою пользовательскую схему на эту:

var UserSchema = new Schema({
  username:     { type: String, unique: true },
  password:     { type:String, set:encryption.Encrypt },
  email:        { type: Email, unique: true, validate:/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ }
});

Я не внес никаких других изменений (которые я помню), и при попытке войти в систему с Пользователем я обнаружил, что мой пароль был неправильным. Когда я посмотрел на данные, зашифрованный пароль, отправленный обратно из базы данных, отличался от того, который был сохранен в базе данных. Если я выну «сеттер» из моей UserSchema, он будет выглядеть правильно.

Теперь моя проблема в том, что «сеттеры» описываются так:

Как вы можете видеть выше, сеттеры позволяют преобразовывать данные до он попадает в необработанный документ mongodb и устанавливается как значение для фактического ключ.

Мне кажется, что этот Сеттер на самом деле действует как геттер и преобразовывает данные, когда они возвращаются назад из базы данных.

Я совершенно не понимаю этого?

1 Ответ

5 голосов
/ 17 июля 2011

На самом деле это была ошибка в Mongoose, которая была исправлена ​​в Mongoose 2.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...