我正在尝试为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;
答案 0 :(得分:1)
问题是您的userSchema
只是一个普通对象,而不是模式对象。因此它没有methods
属性(您的userSchema.methods
是undefined
),所以当您设置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
}
});