在Next.js中导出mongoose模式的正确方法是什么?

btxsgosb  于 2023-10-19  发布在  Go
关注(0)|答案(1)|浏览(130)

我正在看一个mongoose的例子(link),它使用了来自官方Next.js GitHub帐户的Next.js。这是他们的模型(我删除了评论):

import mongoose from 'mongoose'

const PetSchema = new mongoose.Schema({
  name: {
    type: String,
    required: [true, 'Please provide a name for this pet.'],
    maxlength: [60, 'Name cannot be more than 60 characters'],
  },
  owner_name: {
    type: String,
    required: [true, "Please provide the pet owner's name"],
    maxlength: [60, "Owner's Name cannot be more than 60 characters"],
  },
  species: {
    type: String,
    required: [true, 'Please specify the species of your pet.'],
    maxlength: [40, 'Species specified cannot be more than 40 characters'],
  },
  age: {
    type: Number,
  },
  poddy_trained: {
    type: Boolean,
  },
  diet: {
    type: Array,
  },
  image_url: {
    required: [true, 'Please provide an image url for this pet.'],
    type: String,
  },
  likes: {
    type: Array,
  },
  dislikes: {
    type: Array,
  },
})

export default mongoose.models.Pet || mongoose.model('Pet', PetSchema)

为什么要导出mongoose.models.Pet || mongoose.model('Pet', PetSchema)?我们可以只导出export default mongoose.model('Pet', PetSchema)吗?

uidvcgyl

uidvcgyl1#

此模式的目的是确保如果您在一个可能多次导入此模块(这很常见)的代码库中工作,您不会意外地创建多个同名的Mongoose模型。如果你试图创建一个已经存在名字的模型,Mongoose会抛出一个错误。
这是一种保护措施,可以防止在代码库的不同部分导入和导出模型时可能出现的潜在问题。但是,如果您完全确定这个模块在应用程序中只导入一次,那么可以简化export语句,只导出默认的mongoose.model('Pet',PetSchema)。

相关问题