我刚刚开始使用next.js,每当我调用引用另一个文档的API时,mongoose都会向我抛出一个错误,指出“Schema hasn 't been registered for model”。
这是我的代码。
型号
Task.js
const mongoose = require("mongoose");
const TaskModel = () => {
const schema = mongoose.Schema;
const taskSchema = new schema(
{
taskName: {
type: String,
required: true,
},
empId: {
type: schema.Types.ObjectId,
ref: "Employee",
required: true,
},
adminId: {
type: schema.Types.ObjectId,
ref: "Admin",
required: true,
},
deptId: {
type: schema.Types.ObjectId,
ref: "Department",
required: true,
},
deadline: {
type: String,
},
status: {
type: Boolean,
default: false,
},
completedDate: {
type: String,
default: "",
},
completionStatus: {
type: String,
default: "Assigned",
},
},
{ timestamps: true }
);
return mongoose.models.Task ?? mongoose.model("Task", taskSchema);
};
export default TaskModel;
employee.js
const mongoose = require("mongoose");
const EmployeeModel = () => {
const schema = mongoose.Schema;
const employeeSchema = new schema({
empName: {
type: String,
required: true,
},
empEmail: {
type: String,
required: true,
},
password: {
type: String,
required: true,
},
department: {
type: schema.Types.ObjectId,
ref: "Department",
required: true,
// type:String
},
document: {
type: String,
},
loginStatus: {
type: Boolean,
default: false,
},
});
return mongoose.models.Employee ?? mongoose.model("Employee", employeeSchema);
};
export default EmployeeModel;
db.js(用于连接应用和mongoDB)
import mongoose from "mongoose";
import TestModel from "@/models/test";
import TaskModel from "@/models/task";
import AdminModel from "@/models/admin";
import EmployeeModel from "@/models/employee";
import DepartmentModel from "@/models/department";
if (mongoose.connection.readyState !== 1) {
mongoose.connect(process.env.MONGO_URI);
}
mongoose.Promise = global.Promise;
export const db = {
Test: TestModel,
Task: TaskModel,
Admin: AdminModel,
Employee: EmployeeModel,
Department: DepartmentModel,
};
getTask/route.jsx
import { db } from "@/helpers/db";
const Task = db.Task();
export const GET = async () => {
try {
const result = await Task.find().populate("empId");
return Response.json(result);
} catch (error) {
console.log(error);
return Response.json(error, { status: 422 });
}
};
dashboard/page.jsx
"use client";
import style from "./page.module.css";
import Api from "./api";
import { useState, useEffect } from "react";
const Dashboard = () => {
const [filterData, setFilterData] = useState("");
const [finalData, setFinalData] = useState([]);
useEffect(() => {
const apiCall = async () => {
const taskdata = await fetch("http://localhost:3000/api/task/getTask");
const actualTaskData = await taskdata.json();
console.log(actualTaskData);
return actualTaskData;
};
const apires = apiCall();
setFinalData(apires);
}, []);
return (
<div style={{ margin: 0, padding: 0 }}>
</div>
);
};
export default Dashboard;
这是我的错误x1c 0d1x的图像
我附上文件夹结构供参考
1条答案
按热度按时间tyu7yeag1#
看起来您必须注册
Employee
模型才能在populate
方法中使用它。这是未经测试,但尝试: