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

Next.js 14 App Router中如何设置API路由响应的Content-Type头

解决Next.js 14 App Router中API路由返回XML的错误问题

错误原因

你当前的代码混用了Next.js Pages Router的API写法(依赖NextApiRequest/NextApiResponse对象),但在App Router中,API路由的处理函数遵循Web标准,不需要接收res参数,而是直接返回Response实例,所以会出现res.setHeader() is not a function的错误。

修正后的代码

export async function GET(req: Request) {
  try {
    // 动态生成XML内容(替换为你的实际生成逻辑)
    const xmlContent = `<?xml version="1.0" encoding="UTF-8"?>
<root>
  <content>my xml string</content>
</root>`;

    // 返回XML响应,设置正确的Content-Type
    return new Response(xmlContent, {
      headers: {
        "Content-Type": "text/xml; charset=utf-8",
      },
    });
  } catch (err) {
    console.error(err);
    return new Response(JSON.stringify({ error: "服务器内部错误" }), {
      status: 500,
      headers: {
        "Content-Type": "application/json",
      },
    });
  }
}

关键改动说明

  • 移除NextApiRequest/NextApiResponse类型,改用Web标准的Request类型(若无需处理请求参数,可直接省略req)
  • 抛弃res.setHeader和res.send写法,通过new Response()构造响应,在headers参数中指定Content-Type为text/xml
  • 建议添加XML声明头(<?xml version="1.0" encoding="UTF-8"?>),保证XML内容的合法性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:10:59