You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导出后Mongoose模型DemandeTransports变为undefined问题

问题分析与解决方案

核心问题

你遇到的DemandeTransports导入后为undefined、调用findOne报错的情况,主要是Next.js模块缓存/热重载机制、Mongoose模型复用逻辑或导入路径配置导致的。

具体修复步骤

1. 修正Mongoose模型复用逻辑

在Schema.js中,确保模型创建时严格复用已注册的实例,避免因热重载重复创建:

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

// ... 用户模型代码不变 ...

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

// 替换原DemandeTransports定义,去掉可选链的潜在问题
const DemandeTransports = mongoose.models.demandeTransport || mongoose.model("demandeTransport", demandeTransportSchema);

export { Users, DemandeTransports };

2. 检查Next.js路径别名配置

确认jsconfig.json或tsconfig.json中已正确配置@/别名,否则导入路径会失效:

// jsconfig.json
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["*"]
    }
  }
}

3. 重构数据库操作函数(异步化+错误处理)

原函数中存在两个问题:未等待数据库连接完成、res对象未定义。修改为异步函数并完善逻辑:

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

export default async function getAllDemandesFromUser(email) {
  try {
    // 必须等待数据库连接完成后再操作模型
    await connectMongo();
    // 现在可以正常调用模型方法
    const result = await DemandeTransports.findOne({ "user.email": email });
    return result;
  } catch (error) {
    // 抛出错误或返回错误信息,避免使用未定义的res
    throw new Error(`La connection à la bdd mongo a échoué avec l'erreur : ${error.message}`);
  }
}

4. 备选方案:动态获取模型(解决热重载问题)

如果热重载仍导致模型丢失,可以改用函数动态获取模型:

// @/components/database/model/Schema.js
// ... 其他代码不变 ...

// 新增动态获取模型的函数
export const getDemandeTransportsModel = () => {
  return mongoose.models.demandeTransport || mongoose.model("demandeTransport", demandeTransportSchema);
};

// ... 原有导出不变 ...

然后在业务函数中调用:

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

export default async function getAllDemandesFromUser(email) {
  try {
    await connectMongo();
    const DemandeTransports = getDemandeTransportsModel();
    const result = await DemandeTransports.findOne({ "user.email": email });
    return result;
  } catch (error) {
    throw new Error(`La connection à la bdd mongo a échoué avec l'erreur : ${error.message}`);
  }
}

内容的提问来源于stack exchange,提问作者Nathos8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:40:42