Как я могу создать уникальный ha sh и сохранить его в моем документе MongoDB, не отправляя его через req.body? - PullRequest
0 голосов
/ 05 мая 2020

Как я могу сгенерировать уникальный ha sh и сохранить его под ключом в моем документе Mon goose, не требуя от пользователя ввода чего-либо? Я знаю, что могу взять необходимое, но в то же время я хотел бы, чтобы он оставался необходимым, чтобы он всегда существовал. Вот мой код:

модель / пользователь. js


let ChannelSchema = new Schema({
  provider: {type: String},
  stream_key: {type: String},
  auth: {
    access_token: {type: String},
    refresh_token: {type: String},
  },
  profile: {
    id: String,
    login: String
  },
}, { timestamps: true })

let UserSchema = new Schema({
  name: {type: String, required: true, unique: true},
  email: {type: String, required: true, unique: true},
  password: {type: String, required: true, select: false},
  stream_key: {type: String, required: true },
  channel: [ ChannelSchema ]
});

let createStreamKey = (next) => {
  let user = this;
  if(!user.isNew('stream_key')) {
    return next();
  }
  const id = crypto.randomBytes(20).toString('hex');
  user.stream_key = `sinuous_${id}`;
  next();
}

UserSchema.pre('save', createStreamKey);

Ошибка

Error [ValidationError]: User validation failed: stream_key: Path `stream_key` is required.
    at ValidationError.inspect (C:\Users\Who\WebstormProject\what\node_modules\mongoose\lib\error\validation.js:61:24)
    at formatValue (internal/util/inspect.js:563:31)
    at inspect (internal/util/inspect.js:221:10)
    at formatWithOptions (internal/util/inspect.js:1693:40)
    at Object.Console.<computed> (internal/console/constructor.js:272:10)
    at Object.log (internal/console/constructor.js:282:61)
    at C:\Users\Who\WebstormProject\what\routes\auth.js:23:15
    at processTicksAndRejections (internal/process/task_queues.js:93:5) {
  errors: {
    stream_key: MongooseError [ValidatorError]: Path `stream_key` is required.

1 Ответ

0 голосов
/ 05 мая 2020

Вы используете ключевое слово this в функции createStreamKey, но это стрелочная функция, тогда ключевое слово this не будет работать так, как вы ожидали.

Измените его на «нормальный» синтаксис функции ( выражение функции), например:

const createStreamKey = function(next) {
  let user = this;
  if (!user.isNew('stream_key')) {
    return next();
  }
  const id = crypto.randomBytes(20).toString('hex');
  user.stream_key = `sinuous_${id}`;
  next();
}
...