Next.js项目导入User模型触发MODULE_NOT_FOUND错误求助
Next.js 应用导入User模型后触发模块找不到错误
开发Next.js应用时,在AuthOptions.js第3行导入User模型后,出现大量错误,包括code: 'MODULE_NOT_FOUND'、page: '/api/auth/_log'以及Error: Cannot find module 'styled-jsx/package.json'。
已尝试的解决方法
- 移除导入语句可消除错误,但该文件必须使用User模型
- 执行
npm install styled-jsx - 删除package.json和锁文件后重新执行
npm install - 搜索错误信息并通过ChatGPT寻求解答
- 回退Git变更定位到引发问题的具体代码行
相关代码
AuthOptions.js
import GoogleProvider from 'next-auth/providers/google' import connectDB from '@/config/database' import User from '@/models/User'; // <--- 引发问题的行 export const authOptions = { providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, authorization: { params: { prompt: "consent", access_type: "offline", response_type: "code" } } }) ], callbacks: { // 登录成功时调用 async signIn({profile}) { // 1. 连接数据库 await connectDB() // 2. 检查用户是否存在 const userExists = await User.findOne({ email: profile.email}) // 3. 如果不存在,添加用户到数据库 if (!userExists) { // 截断过长的用户名 const username = profile.name.slice(0,20) await User.create({ email: profile.email, username, image: profile.picture, }) } // 4. 返回true允许登录 return true }, // 修改session对象 async session({session}) { // 1. 从数据库获取用户 const user = await User.findOne({ email: session.user.email}) // 2. 将用户ID赋值给session session.user.id = user._id.toString() // 3. 返回session return session } } }
User模型代码
import { Schema, model, models } from 'mongoose' import { unique} from 'next/dist/build/utils' const UserSchema = new Schema({ email: { type: String, unique: [true, '邮箱已存在'], required: [true, '邮箱为必填项'] }, username: { type: String, required: [true, '用户名为必填项'] }, image: { type: String }, bookmarks: [ { type: Schema.Types.ObjectId, ref: 'Campaign' } ] }, { timestamps: true }) const User = models.User || model('User', UserSchema) export default User
connectDB函数代码
import mongoose from 'mongoose' let connected = false const connectDB = async () => { mongoose.set('strictQuery', true) // 如果数据库已连接,不再重复连接 if (connected) { console.log('MongoDB已连接...') return } // 连接MongoDB try{ await mongoose.connect(process.env.MONGODB_URI) connected = true console.log('MongoDB连接成功...') } catch (error) { console.log(error) } } export default connectDB
文件结构
项目根目录 ├── config/ │ └── database.js ├── models/ │ └── User.js ├── pages/ │ └── api/ │ └── auth/ │ └── [...nextauth].js └── AuthOptions.js
控制台错误信息
code: 'MODULE_NOT_FOUND'page: '/api/auth/_log'Error: Cannot find module 'styled-jsx/package.json'- 伴随大量模块导入相关的连锁报错
内容的提问来源于stack exchange,提问作者Boingoloid
相关产品推荐
相关产品推荐

