Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose,Next.JS OverwriteModeError:编译后无法覆盖模型_Node.js_Mongodb_Mongoose_Graphql_Next.js - Fatal编程技术网

Node.js Mongoose,Next.JS OverwriteModeError:编译后无法覆盖模型

Node.js Mongoose,Next.JS OverwriteModeError:编译后无法覆盖模型,node.js,mongodb,mongoose,graphql,next.js,Node.js,Mongodb,Mongoose,Graphql,Next.js,我正在尝试将mongoose和apollo与Next.js集成 我围绕阿波罗服务器写了这个包装: import mongoose from "mongoose" const {logger} = require("../middleware/logger"); const connect = async () => { logger.info("Connecting to DB..."); await mong

我正在尝试将mongoose和apollo与Next.js集成 我围绕阿波罗服务器写了这个包装:

import mongoose from "mongoose"
const {logger} = require("../middleware/logger");


const connect = async () => {
    logger.info("Connecting to DB...");
    await mongoose
        .connect(process.env.MONGO_URI, {
            useNewUrlParser: true,
            useFindAndModify: false,
            useUnifiedTopology: true
        }).then(() => logger.info(`Mongo running at ${process.env.MONGO_URI}`))
        .catch(err => logger.error(err));
}

const connectDB = (handler) => async (req, res) => {
    if (mongoose.connections[0].readyState !== 1) {
        await connect();
    }
    return handler(req, res);
}

const db = mongoose.connection;
db.once('ready', () => logger.info(`Connected to mongo on ${process.env.MONGO_URI}`));

export default connectDB;
在此模型中,在单独的文件中:

const mongoose = require('mongoose');
const {Schema} = mongoose;

const CustomerSchema = new Schema({
    name: {
        type: String,
        required: [true, 'Customer name is required'],
        unique: true,
        trim: true,
    },
    createdAt: {
        type: Date,
        default: Date.now
    }
}, {
    toJSON: {
        transform: function (doc, ret) {
            ret._id = ret._id.toString();
            delete ret.__v
        }
    }
});

module.exports = mongoose.model('Customer', CustomerSchema);
我的阿波罗服务器现在看起来像这样:

import {ApolloServer, gql} from "apollo-server-micro";
import connectDB from "../../middleware/db-middleware";
const _Customer = require("../../db/models/Customer");

const typeDefs = gql`

    type Customer {
        id: ID!
        name: String!
        createdAt: String
    }

    type Query {
        hello: String!
    }
    
    type NewCustomerResponse {
        success: Boolean!
        message: String
    }

    type Mutation {
        addCustomer(name: String!): NewCustomerResponse!
    }
`;

const resolvers = {
    Mutation: {
        addCustomer: async (parent, {name}, context, info) => {
            await _Customer.create({name});
            return {success: true, message: "Sample message"};
        }
    }
};

const apolloServer = new ApolloServer({
    typeDefs,
    resolvers,
    context: () => ({}),
});

export default connectDB(apolloServer.createHandler({path: "/api/gql"}));
第一次运行正常,但当我修改任何内容,并且next.js自动重新编译源文件时,它会抛出以下错误:

OverwriteModelError: Cannot overwrite `Customer` model once compiled.

有人知道我做错了什么以及如何解决这个问题吗?

你找到解决方案了吗?是的,我必须像这样导出我的模型:
mongoose.models.Customer | mongoose.model('Customer',CustomerSchema)