Task我有以下模塊,我需要以某種方式匯出以避免“ OverwriteModelError:編譯后無法覆寫模型”的錯誤。
我已經看到很多答案解釋了這一點,但我無法讓它發揮作用。最后一行是問題(export default models...
import { Schema, model, models } from 'mongoose';
export interface ITask {
title: string;
description: string;
}
const TaskSchema = new Schema<ITask>({
title: {type: String},
description: {type: String}
},{
timestamps: true,
versionKey: false
})
export default models['Task']<ITask> || model<ITask>('Task', TaskSchema);
我models['Task']<ITask>隨機添加,因為我嘗試的一切似乎都不起作用
當我匯入該模塊并使用它時
const tasks = await Task.find();
它給出了一個我不明白的打字稿錯誤:Each member of the union type... has signatures, but none of those signatures are compatible with each other
編輯
在pages/api/tasks/[id].ts我有這個
import { dbConnect, runMiddleware } from "@db/index";
import Task from "@model/Task";
dbConnect();
const SingleTask: NextApiHandler = async (req, res) => {
const { method, body, query: {id} } = req;
const morgan = Morgan("dev");
switch (method) {
case "GET":
try {
const task = await Task.findById(id);
....
在pages/api/tasks/index.ts我有這個
import { dbConnect, runMiddleware } from "@db/index";
import Task from "@model/Task";
dbConnect();
const Tasks: NextApiHandler = async (req, res) => {
const { method, body } = req;
const morgan = Morgan("dev");
switch (method) {
case "GET":
try {
const tasks = await Task.find();
....
方法參考dbConnectthis
import { connect, connection, ConnectionStates } from "mongoose";
interface ConnectionInterface {
isConnected: ConnectionStates;
}
const conn: ConnectionInterface = {
isConnected: 0,
};
export async function dbConnect() {
if (conn.isConnected === 1) return;
const db = await connect(process.env.MONGODB_URI);
conn.isConnected = db.connections[0].readyState;
console.log("Connected to database", db.connection.db.databaseName);
}
uj5u.com熱心網友回復:
只要您只Task在一個地方創建模型,您實際上應該只需要以下內容......
export default model<ITask>("Task", TaskSchema);
Task但是,如果您想在編譯之前檢查現有模型,請使用類似這樣的東西
import { Model, Schema, model, models } from "mongoose";
// ...
const Task = models.Task as Model<ITask> ?? model<ITask>("Task", TaskSchema);
export default Task;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/504007.html
