NodeJS Mongoose架构:TypeError:无法将属性“generateAuthToken”设置为未定义

rryofs0p  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(108)

我试图创建一个方法到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();

u7up0aaq

u7up0aaq1#

问题是你的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
  }
});

字符串

相关问题