遵循课程和mongoose不断抛出无效的架构错误,原始代码在Mongoose 5.8.7中构建,但在当前版本中不再工作

vof42yt1  于 2023-06-30  发布在  Go
关注(0)|答案(1)|浏览(94)
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]应用程序崩溃-在启动前等待文件更改...
我已经看过了文档上的新架构,但无论如何也找不出哪里出了问题

g9icjywg

g9icjywg1#

您遇到的错误与Mongoose模型中的模式定义有关。具体而言,错误消息表明为resetPasswordLink字段提供的默认值存在问题。
若要修复此错误,请确保为resetPasswordLink字段提供有效的默认值。默认值应与指定的类型匹配,在本例中为String。

const userSchema = new Schema(
  {
    // Other fields...
    resetPasswordLink: {
      data: {
        type: String,
        default: "",
      },
    },
  },
  { timestamps: true }
);

在更新后的代码中,resetPasswordLink字段被定义为一个对象,其数据属性类型为String,默认值为空字符串(“”)。
在使用此模型之前,请确保安装了必要的依赖项(mongoose、crypto),并且正确建立了Mongoose连接。

相关问题