Next.js报错:Page does not export a default function,MongoDB连接问题
问题分析与解决方案
核心问题
你的connectMongoDB中间件函数存在一个关键错误:内部定义了异步处理函数,但没有将其返回。当你调用connectMongoDB(handler)时,函数实际返回的是undefined,而非预期的Next.js API处理函数,这直接导致了"Page does not export a default function"报错。
修正后的connect-db中间件代码
import type { NextApiRequest, NextApiHandler, NextApiResponse } from 'next' import mongoose from 'mongoose' export const connectMongoDB = (handler: NextApiHandler) => { // 关键:添加**return**,返回内部的异步处理函数 return async (req: NextApiRequest, res: NextApiResponse) => { // 检查连接状态 if (mongoose.connections[0].readyState) { return handler(req, res) } const { DB_CONNECTION_STRING } = process.env if (!DB_CONNECTION_STRING) { return res.status(500).json({ error: 'DB Connection Error' }) } mongoose.connection.on('connected', () => console.log('DB Connection established') ) mongoose.connection.on('error', () => console.log('DB Connection Error')) await mongoose.connect(DB_CONNECTION_STRING) return handler(req, res) } }
额外优化建议
你的API路由代码逻辑可行,但可以优化登录判断的分支逻辑:当前代码中,即使登录成功,后续的return res.status(400)仍会执行,需要在成功后直接return终止流程:
const handler = (req: NextApiRequest, res: NextApiResponse) => { if (req.method === 'POST') { const { login, pwd } = req.body if (login === 'admin@admin.com' && pwd === 'Admin@123') { // 成功后直接return,避免执行后续错误响应 return res.status(200).json({ message: 'Successfully logged in!' }) } return res.status(400).json({ error: 'Failed to log in.' }) } return res.status(405).json({ error: 'Unsupported Method' }) }
内容的提问来源于stack exchange,提问作者Caio de Araujo Morais
相关产品推荐
相关产品推荐

