You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:52:07