I'm trying to update a user id using Mongoose inside a Nextjs 13 route handler. Here's my code to do that:
import { NextResponse } from "next/server";
import { User } from "@/mongo";
async function handler(request: Request) {
const payload = await request.json();
const user = payload.data.id;
if (payload.type === "user.created") {
try {
console.log(User);
const createdUser = await User.create({
userId: user,
});
console.log(createdUser);
return NextResponse.json({ message: `User: ${user} successfully added` });
} catch (error) {
return NextResponse.json({ message: `Error: ${error}` }, { status: 500 });
}
}
}
export const GET = handler;
export const POST = handler;
export const PUT = handler;
However, when I make an API request to this endpoint I get an error:
dev: - error Error [TypeError]: Cannot read properties of undefined (reading 'CommentSchema')
dev: at Module.CommentSchema (webpack-internal:///(sc_server)/./mongo/index.ts:3:104)
dev: at eval (webpack-internal:///(sc_server)/./mongo/Review.ts:38:40)
dev: at (sc_server)/./mongo/Review.ts (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/app/api/webhooks/user/route.js:82:1)
dev: at __webpack_require__ (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/webpack-runtime.js:33:42)
dev: at eval (webpack-internal:///(sc_server)/./mongo/index.ts:11:65)
dev: at (sc_server)/./mongo/index.ts (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/app/api/webhooks/user/route.js:102:1)
dev: at __webpack_require__ (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/webpack-runtime.js:33:42)
dev: at eval (webpack-internal:///(sc_server)/./app/api/webhooks/user/route.ts:8:64)
dev: at (sc_server)/./app/api/webhooks/user/route.ts (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/app/api/webhooks/user/route.js:52:1)
dev: at __webpack_require__ (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/webpack-runtime.js:33:42)
dev: at eval (webpack-internal:///(sc_server)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fwebhooks%2Fuser%2Froute&page=%2Fapi%2Fwebhooks%2Fuser%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fwebhooks%2Fuser%2Froute.ts&appDir=%2Fhome%2Fethan-krich%2FEthans%20Work%2FeTech%20Stuff%2Fcommerce-karma%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Fethan-krich%2FEthans%20Work%2FeTech%20Stuff%2Fcommerce-karma&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!:15:145)
dev: at (sc_server)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fwebhooks%2Fuser%2Froute&page=%2Fapi%2Fwebhooks%2Fuser%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fwebhooks%2Fuser%2Froute.ts&appDir=%2Fhome%2Fethan-krich%2FEthans%20Work%2FeTech%20Stuff%2Fcommerce-karma%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Fethan-krich%2FEthans%20Work%2FeTech%20Stuff%2Fcommerce-karma&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/app/api/webhooks/user/route.js:42:1)
dev: at __webpack_require__ (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/webpack-runtime.js:33:42)
dev: at __webpack_exec__ (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/app/api/webhooks/user/route.js:682:39)
dev: at /home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/app/api/webhooks/user/route.js:683:28
dev: at Object.<anonymous> (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/app/api/webhooks/user/route.js:686:3)
dev: at Module._compile (node:internal/modules/cjs/loader:1233:14)
dev: at Module._extensions..js (node:internal/modules/cjs/loader:1287:10)
dev: at Module.load (node:internal/modules/cjs/loader:1091:32)
dev: at Module._load (node:internal/modules/cjs/loader:938:12)
dev: at Module.require (node:internal/modules/cjs/loader:1115:19)
dev: at require (node:internal/modules/helpers:119:18)
dev: at requirePage (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/node_modules/next/dist/server/require.js:112:75)
dev: at /home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/node_modules/next/dist/server/load-components.js:80:84
dev: at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
dev: at async loadComponentsImpl (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/node_modules/next/dist/server/load-components.js:80:26)
dev: at async DevServer.findPageComponentsImpl (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/node_modules/next/dist/server/next-server.js:772:36) {
dev: digest: undefined
dev: }
Here's the relevant parts of my Schema:
Comment Schema:
import mongoose from "mongoose";
export const CommentSchema = new mongoose.Schema ({
text: {
type: String,
required: true,
},
author: {
type: mongoose.Types.ObjectId,
required: true,
ref: "User",
},
createdAt: {
type: Date,
required: true,
default: () => Date.now(),
},
updatedAt: Date,
})
CommentSchema.pre("save", function (next) {
this.updatedAt = () => Date.now() as Date;
next();
});
User Schema:
import mongoose from "mongoose";
const UserSchema = new mongoose.Schema({
userId: {
type: String,
required: true,
},
bio: String,
createdAt: {
type: Date,
required: true,
default: () => Date.now(),
},
updatedAt: Date,
});
UserSchema.pre ("save", function (next) {
this.updatedAt = () => Date.now() as Date
next()
})
export default mongoose.model("User", UserSchema);
I'm using Nextjs 13 with the new app router and Mongoose to connected to MongoDB.
Edit: I fixed this issue on CommentSchema but now I'm getting a new error. It also seems fixing this error brings back the other one. What is happening?:
dev: - error Error [OverwriteModelError]: Cannot overwrite `User` model once compiled.
dev: at Mongoose.model (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/node_modules/mongoose/lib/index.js:563:13)
dev: at eval (webpack-internal:///(sc_server)/./mongo/User.ts:25:114)
dev: at (sc_server)/./mongo/User.ts (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/app/api/webhooks/user/route.js:92:1)
dev: at __webpack_require__ (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/webpack-runtime.js:33:42)
dev: at eval (webpack-internal:///(sc_server)/./mongo/index.ts:10:63)
dev: at (sc_server)/./mongo/index.ts (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/app/api/webhooks/user/route.js:102:1)
dev: at __webpack_require__ (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/webpack-runtime.js:33:42)
dev: at eval (webpack-internal:///(sc_server)/./app/api/webhooks/user/route.ts:8:64)
dev: at (sc_server)/./app/api/webhooks/user/route.ts (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/app/api/webhooks/user/route.js:52:1)
dev: at __webpack_require__ (/home/ethan-krich/Ethans Work/eTech Stuff/commerce-karma/.next/server/webpack-runtime.js:33:42)