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

如何将用户输入数据发送至Next.js API路由?数据未接收问题排查

解决Next.js API路由无法接收POST数据的问题

问题根源

你直接将URL字符串作为请求体发送,但未设置正确的Content-Type请求头,导致Next.js API路由无法解析该格式的请求体,最终req.body为空。另外,直接在浏览器访问localhost/api/data/url属于GET请求,这类请求本身没有请求体,自然拿不到数据。

修复方案

1. 调整客户端fetch请求

添加请求头并将数据包装为JSON格式发送:

// 处理URL输入的组件 
//InputURL.js

import { useState } from "react";

export default function InputURL() {
  const [url, setUrl] = useState("");

  const handleSubmit = async (e) => {
    e.preventDefault();

    try {
      const response = await fetch(`/api/data/url`, {
        method: "POST",
        headers: {
          "Content-Type": "application/json", // 必须设置该头部以解析JSON
        },
        body: JSON.stringify({ url }), // 将URL包装为JSON对象
      });
      const result = await response.json();
      console.log("API返回结果", result);
    } catch (error) {
      console.error("请求出错", error);
    }

    console.log("URL已发送至API", url);
  };

  return (
      <form onSubmit={handleSubmit}>
          <input
            onChange={(e) => setUrl(e.target.value)}
            type="url"
            value={url} // 绑定value消除受控组件警告
          />
          <button type="submit">Submit</button>
      </form>
  );
}

2. 更新API路由逻辑

添加请求方法校验,并从req.body中正确提取参数:

// pages/api/data/url.js
export default async function handler(req, res) {
  // 限制仅接受POST请求
  if (req.method !== 'POST') {
    return res.status(405).json({ message: '仅支持POST请求' });
  }

  const { url } = req.body;
  if (!url) {
    return res.status(400).json({ message: '请提供有效URL' });
  }

  try {
    const data = await getData(url);
    res.status(200).json(data);
  } catch (error) {
    res.status(500).json({ message: '数据抓取失败', error: error.message });
  }
}

重要提醒

  • 浏览器直接访问API路由是GET请求,不会携带POST请求体,测试时请通过组件提交表单,或用Postman等工具发送POST请求。
  • 必须设置Content-Type: application/json,否则Next.js无法自动解析JSON格式的请求体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:03:18