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
相关产品推荐
相关产品推荐

