Vercel部署Remix应用时Response.json报错问题求助
解决Vercel部署Remix后Response.json报错的问题
问题原因
Vercel默认使用的Node.js版本可能低于18,而Response.json()是Node.js 18及以上版本才支持的全局API。本地开发环境用了高版本Node所以运行正常,部署到Vercel后低版本Node不支持该方法,从而触发TypeError: Response.json is not a function错误。
解决方案
方案1:指定Vercel使用的Node.js版本
在项目根目录创建.nvmrc文件,内容写为:
18
或者在package.json中添加engines字段明确版本要求:
{ "engines": { "node": ">=18" } }
Vercel会自动读取配置并使用指定版本的Node环境部署,以此支持Response.json()方法。
方案2:兼容低版本Node的手动响应写法
如果暂时无法升级Node版本,直接替换Response.json()为手动构造JSON响应:
// 原写法 return Response.json({ errors: { email: "邮箱格式错误" } }); // 替换后的兼容写法 return new Response(JSON.stringify({ errors: { email: "邮箱格式错误" } }), { status: 400, headers: { "Content-Type": "application/json", }, });
方案3:使用Remix官方推荐的兼容工具函数
虽然旧的全局json()函数已废弃,但Remix v2+中可以从@remix-run/node导入官方维护的json工具函数,它会自动处理跨环境兼容性:
import { json } from "@remix-run/node"; // 在ActionFunction中使用 return json({ errors: { email: "邮箱格式错误" } }, { status: 400 });
验证步骤
重新部署项目后提交无效表单数据,确认报错是否消失。若问题仍存在,检查Vercel项目设置中的Node版本是否正确应用,或查看构建日志确认Node版本信息。
内容的提问来源于stack exchange,提问作者nKc
相关产品推荐
相关产品推荐

