Mongoose Схема: TypeError: Невозможно установить свойство 'generateAuthToken' из неопределенного - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь создать метод для userSchema, однако я получаю эту ошибку:

TypeError: Невозможно установить свойство 'generateAuthToken' из неопределенного

userSchema.methods.generateAuthToken = function() {
  // const token = jwt.sign({ _id: user._id }, config.get("JWTPRIVATEKEY"));
  const token = jwt.sign({ _id: this._id }, "Privatekey");
  return token;
};

Примечание: я не использую функцию стрелки вместо ее обычной функции:

var userSchema = {
  name: {
    type: String,
    require: true
  },
  email: {
    type: String,
    require: true,
    unique: true
  },
  password: {
    type: String
  }
};

userSchema.methods.generateAuthToken = function() {
  // const token = jwt.sign({ _id: user._id }, config.get("JWTPRIVATEKEY"));
  const token = jwt.sign({ _id: this._id }, "Privatekey");
  return token;
};

const User = mongoose.model("Users", new mongoose.Schema(userSchema));

function validateUser(user) {
  let schema = {
    name: Joi.string().required(),
    email: Joi.string()
      .required()
      .email(),
    password: Joi.string().required()
  };

  return Joi.validate(user, schema);
}

exports.User = User;
exports.validateUser = validateUser;

Вариант использования

  let user = await User.findOne({ email: req.body.email });

  const token = user.generateAuthToken();

1 Ответ

0 голосов
/ 04 марта 2019

Проблема в том, что вы userSchema просто обычный объект, а не объект схемы.Так что у него нет свойства methods (ваше userSchema.methods равно undefined), поэтому, когда вы установите userSchema.methods.generateAuthToken, оно выдаст ошибку.

Пожалуйста, посмотрите на документ https://mongoosejs.com/docs/guide.html#methods

Сначала вы должны определить объект схемы

var userSchema = new mongoose.Schema({
  name: {
    type: String,
    require: true
  },
  email: {
    type: String,
    require: true,
    unique: true
  },
  password: {
    type: String
  }
});
...