Мангуст: как установить _id вручную перед сохранением?

#node.js #mongoose #mongoose-schema

#node.js #мангуст #мангуст-схема

Вопрос:

С приведенным ниже кодом:

 const schema = new Schema({
    _id: {
        type: String
    },
    name: {
        type: String,
        required: true,
        trim: true
    }
}

schema.pre('validate', (next) => {
    console.log(this.name);
    this._id = crypto.createHash('md5').update(this.name).digest("hex");
    next();
});

const myObject = new MyObject({ name: 'SomeName' });
myObject.save();
  

Приложение выдает это сообщение об ошибке:

 MongooseError: document must have an _id before saving
  

Мой вопрос в том, как можно установить _id вручную для модели?

И почему this.name не определено

Ответ №1:

(next) => ... является ли функция arrow, где this является лексической и ссылается на охватывающую область, которая находится module.exports в Node.js область действия модуля.

Для того, чтобы получить динамический this внутри функции, это должна быть обычная функция:

 schema.pre('validate', function (next) { ... })
  

Комментарии:

1. Спасибо за объяснение функции стрелки. Теперь все работает как по маслу!