导出时Mongoose模型未定义

xytpbqjk  于 2023-01-26  发布在  Go
关注(0)|答案(2)|浏览(144)

我将模型DemandeTransports从以下文件导出:

//@/components/database/model/Schema.js
import { Schema } from "mongoose";
import mongoose from "mongoose";

const userSchema = new Schema({
  email: { type: String, index: true, unique: true, required: true },
  password: { type: String, required: true },
  role: { type: String, required: true },
  infos: Map,
});

const Users = mongoose.models?.user || new mongoose.model("user", userSchema);

const demandeTransportSchema = new Schema({
  date: { type: Date, required: true },
  user: { type: Object, required: true },
  values: { type: Object, required: true },
});

const DemandeTransports =
  mongoose.models?.demandeTransport ||
  new mongoose.model("demandeTransport", demandeTransportSchema);

console.log(DemandeTransports.findOne);
export { Users, DemandeTransports };

哪个日志(在服务器上):[功能:findOne]
但是当我尝试导入这个文件中的模型时:

//@/lib/getAllDemandesFromUser.js
import connectMongo from "@/components/database/conn";
import { DemandeTransports } from "@/components/database/model/Schema";

export default function getAllDemandesFromUser(email) {
  console.log("JSON.stringify(DemandeTransports)");
  console.log(JSON.stringify(DemandeTransports));
  connectMongo().catch((error) =>
    res.status(500).json({
      error: "La connection à la bdd mongo a échoué avec l'erreur : " + error,
    })
  );
  const result = DemandeTransports.findOne({ "user.email": email });
  return result;
}

我得到类型错误:* 组件数据库模型架构WEBPACKIMPORTEDMODULE_1 *_.需求传输. findOne不是函数
DemandeTransports被记录为未定义,我不知道为什么。

cotxawn7

cotxawn71#

看起来问题出在您尝试从Schema.js文件导入DemandeTransports模型的方式上。
看起来您试图像使用Mongoose模型一样使用DemandeTransports模型,但实际上它只是一个普通的JavaScript对象,没有像findOne()这样的方法。
一种可能的解决方案是将DemandeTransports模型作为普通对象导入,然后将其传递给Mongoose的model()函数以创建一个可用于查询数据库的新模型。

// Schema.js
const demandeTransportSchema = new Schema({
  date: { type: Date, required: true },
  user: { type: Object, required: true },
  values: { type: Object, required: true },
});

export const DemandeTransportSchema = demandeTransportSchema;

// getAllDemandesFromUser.js
import connectMongo from "@/components/database/conn";
import { DemandeTransportSchema } from "@/components/database/model/Schema";
const DemandeTransports = mongoose.model("demandeTransport", DemandeTransportSchema);

export default function getAllDemandesFromUser(email) {
  connectMongo().catch((error) =>
    res.status(500).json({
      error: "La connection à la bdd mongo a échoué avec l'erreur : " + error,
    })
  );
  const result = DemandeTransports.findOne({ "user.email": email });
  return result;
}

另一个解决方案是使用mongoose.connection.model(“需求传输”,需求传输模式),而不是mongoose.model(“需求传输”,需求传输模式)

// Schema.js
const demandeTransportSchema = new Schema({
  date: { type: Date, required: true },
  user: { type: Object, required: true },
  values: { type: Object, required: true },
});

export const DemandeTransports = mongoose.connection.model('demandeTransport', demandeTransportSchema);

通过这种方式,您可以导入已经创建的模型,并通过findOne()等方法直接使用它。
还要确保导入的是mongoose库,否则无法建立到数据库的连接,也不会创建模型。

ymzxtsji

ymzxtsji2#

我刚刚明白:我的基本错误是我试图在客户端连接到mongodb,但这是不可能的。我将所有调用转移到getServerSideProps函数中的数据库:

export async function getServerSideProps(context) {
  const session = await unstable_getServerSession(
    context.req,
    context.res,
    authOptions
  );
  // Fetch data from external API
  connectMongo().catch((error) =>
    console.log("Erreur lors de la connection à la bdd : " + error)
  );
  const result = await DemandeTransports.findOne({
    "user.email": session.user.email,
  });

  const result2 = result.toObject();
  console.log(result.toObject());
  // Pass data to the page via props
  return { props: { result2 } };
}

现在它工作得很好。

相关问题