Programming/Vue.js

[vue] mongoose ERROR ServerMiddleware Error: Cannot overwrite User model once compiled.

통통만두 2022. 1. 22. 12:31
반응형
npm run dev

위의 명령어로 로컬에서 서비스를 띄운 후, 파일을 수정하거나 하면 알아서 hot loading를 해줍니다.

정적인 페이지나 다른 부분은 문제가 없는데 mongoose를 사용중에는 아래와 같은 에러를 만나게 됩니다.

 ERROR  ServerMiddleware Error: Cannot overwrite User model once compiled.                                                                                                          12:23:25

  at Mongoose.model (node_modules/mongoose/lib/index.js:506:13)
  at api/schamas/user.js:42:19
  at g (node_modules/jiti/dist/jiti.js:1:55111)
  at api/routes/signRoute.ts:6:36
  at g (node_modules/jiti/dist/jiti.js:1:55111)
  at module.exports (api/routes/index.ts:6:20)
  at api/index.ts:36:20
  at Resolver.g [as _require] (node_modules/jiti/dist/jiti.js:1:55111)
  at Resolver.requireModule (node_modules/@nuxt/core/dist/core.js:381:29)
  at Server._requireMiddleware (node_modules/@nuxt/server/dist/server.js:836:39)
  at Server._normalizeMiddleware (node_modules/@nuxt/server/dist/server.js:783:25)
  at Server.resolveMiddleware (node_modules/@nuxt/server/dist/server.js:856:23)
  at Server.replaceMiddleware (node_modules/@nuxt/server/dist/server.js:909:36)
  at FSWatcher.<anonymous> (node_modules/@nuxt/builder/dist/builder.js:872:40)
  at invokeFunc (node_modules/lodash/lodash.js:10401:23)
  at trailingEdge (node_modules/lodash/lodash.js:10450:18)

뭔가 하니 mongoose schema는 한 번만 정의하라는 겁니다.

 

  • ./api/schemas/user.js (기존)
import mongoose from 'mongoose';

const userSchema = new mongoose.Schema({
    id: {
        type: String,
        required: true,
        unique: true,
    },
    password: {
        type: String,
        required: true
    },
    name: {
        type: String,
        required: true
    },
    mobile: {
        type: String
    },
    email: {
        type: String
    },
    point: {
        type: Number
    },
    delYn: {
        type: String,
        default: 'N'
    },
    createDate: {
        type: Date,
        default: Date.now
    },
    updateDate: {
        type: Date
    },
    deleteDate: {
        type: Date
    }
});

export default mongoose.model('User', userSchema);

 

  • ./api/schemas/user.js (변경)
import mongoose from 'mongoose';

const userSchema = new mongoose.Schema({
    id: {
        type: String,
        required: true,
        unique: true,
    },
    password: {
        type: String,
        required: true
    },
    name: {
        type: String,
        required: true
    },
    mobile: {
        type: String
    },
    email: {
        type: String
    },
    point: {
        type: Number
    },
    delYn: {
        type: String,
        default: 'N'
    },
    createDate: {
        type: Date,
        default: Date.now
    },
    updateDate: {
        type: Date
    },
    deleteDate: {
        type: Date
    }
});

export default mongoose.models.User || mongoose.model('User', userSchema);

 

제일 아래 export 하는 부분만 참고하시면 됩니다

// 기존
export default mongoose.model('User', userSchema);

// 변경
export default mongoose.models.User || mongoose.model('User', userSchema);​

 

Reference

https://nesin.io/blog/fix-mongoose-cannot-overwrite-model-once-compiled-error

반응형