猫鼬模式:TypeError:无法设置属性'generateAuthToken'的未定义

时间:2019-03-04 07:18:01

标签: node.js mongodb mongoose-schema

我正在尝试为userSchema创建方法,但是出现此错误:

  

TypeError:无法设置未定义的属性'generateAuthToken'

lifeCycleOwner

注意:我不使用箭头功能,而是使用其正常功能:

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;

1 个答案:

答案 0 :(得分:1)

问题是您的userSchema只是一个普通对象,而不是模式对象。因此它没有methods属性(您的userSchema.methodsundefined),所以当您设置userSchema.methods.generateAuthToken时,它将引发错误。

请查看文档 https://mongoosejs.com/docs/guide.html#methods

您应该先定义Schema对象

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