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

NextJS调用/api/dates无响应 未返回结果致请求停滞问题排查

问题根因

故障由两处代码错误共同导致,现象完全匹配你描述的场景:

  • 核心错误:Next.js API路由处理函数的参数顺序写反。框架约定handler第一个入参为请求对象NextApiRequest,第二个入参为响应对象NextApiResponse,你的代码把res放在第一位、req放在第二位,导致代码中拿到的req实际是响应对象,res实际是请求对象。这直接造成req.method、req.body全部为undefined,GET请求的判断逻辑永远无法命中,代码执行完也没有向真正的响应对象写入返回内容,自然触发"API resolved without sending a response for /api/dates"的警告。
  • 次要错误:MongoDB的find({})方法返回的是查询游标,并非直接的文档结果集,必须调用.toArray()才能获取实际的查询数据,直接序列化游标不仅拿不到有效日期数据,还可能因为游标未正常释放导致请求挂起。
  • 无效数据库凭据不抛错的原因:参数顺序错误导致GET请求判断逻辑不命中,数据库连接代码根本没有执行,自然不会触发连接相关的报错。
修复方案

1. 修正API路由代码

调整/pages/api/dates.ts的参数顺序,补全游标转数组逻辑,同时补全异常场景和不支持请求方法的响应,避免无响应警告:

import type { NextApiRequest, NextApiResponse } from 'next'
import { connectToDatabase } from '../../lib/mongodb'

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  if (req.method === 'GET') {
    try {
      const { db } = await connectToDatabase()
      const dates = await db.collection('dates').find({}).toArray()
      return res.status(200).json({
        message: dates,
        success: true,
      })
    } catch (error: any) {
      return res.status(500).json({
        message: error.message,
        success: false,
      })
    }
  }
  res.setHeader('Allow', ['GET'])
  return res.status(405).end(`Method ${req.method} Not Allowed`)
}

2. 其他代码说明

  • /components/DateAndHours.tsx中的前端fetch请求逻辑没有问题,不需要修改,接口修复后即可正常在控制台打印返回数据。
  • /lib/mongodb.ts的数据库连接逻辑本身没有问题,接口修复后,如果填入无效MongoDB URI会正常抛出连接错误,填入正确凭据即可正常读写数据。

内容的提问来源于stack exchange,提问作者zivnadel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:42:21