const mongoose = require("mongoose");
const { Schema } = mongoose;
const crypto = require("crypto");
const userSchema = new Schema(
{
username: {
type: String,
trim: true,
required: true,
unique: true,
index: true,
lowercase: true,
},
name: {
type: String,
trim: true,
required: true,
},
email: {
type: String,
trim: true,
required: true,
unique: true,
lowercase: true,
},
hashed_password: {
type: String,
required: true,
},
salt: String,
role: {
type: String,
default: "user",
},
resetPasswordLink: {
data: String,
default: "",
},
},
{ timestamps: true }
);
// virtual fields
userSchema
.virtual("password")
.set(function (password) {
// create temp variable called _password
this._password = password;
// generate salt
this.salt = this.makeSalt();
// encrypt password
this.hashed_password = this.encryptPassword(password);
})
.get(function () {
return this._password;
});
// methods > authenticate, encryptPassword, makeSalt
userSchema.methods = {
authenticate: function (plainText) {
return this.encryptPassword(plainText) == this.hashed_password;
},
encryptPassword: function (password) {
if (!password) return "";
try {
return crypto
.createHmac("sha1", this.salt)
.update(password)
.digest("hex");
} catch (err) {
return "";
}
},
makeSalt: function () {
return Math.round(new Date().valueOf() * Math.random()) + "";
},
};
// export user model
module.exports = mongoose.model("User", userSchema);
它抛出的错误是throw new TypeError(Invalid schema configuration: \
${瓦尔}不是
+ ^
TypeError:无效的架构配置:``不是路径default
上的有效类型。有关https://mongoosejs.com/docs/guide.html#definition有效模式类型的列表,请参见www.example.com。
[nodemon]应用程序崩溃-在启动前等待文件更改...
我已经看过了文档上的新架构,但无论如何也找不出哪里出了问题
1条答案
按热度按时间g9icjywg1#
您遇到的错误与Mongoose模型中的模式定义有关。具体而言,错误消息表明为resetPasswordLink字段提供的默认值存在问题。
若要修复此错误,请确保为resetPasswordLink字段提供有效的默认值。默认值应与指定的类型匹配,在本例中为String。
在更新后的代码中,resetPasswordLink字段被定义为一个对象,其数据属性类型为String,默认值为空字符串(“”)。
在使用此模型之前,请确保安装了必要的依赖项(mongoose、crypto),并且正确建立了Mongoose连接。