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

使用NodeJS发送Post请求调用API时收到406 Not Acceptable响应的原因

解决Express代理服务器发送FormData报406错误的问题

问题核心

你遇到的406错误本质是请求头Content-Type配置冲突:手动设置的multipart/form-data会覆盖FormData自动生成的带boundary参数的头信息,导致外部API无法正确解析请求体,从而返回406(无法处理请求格式)。

修复步骤

  1. 移除手动设置的Content-Type
    FormData的getHeaders()方法会自动生成包含正确boundary的multipart/form-data头,无需手动添加,否则会造成冲突。
  2. 改用async/await简化异步逻辑
    避免回调嵌套,代码更易维护,同时别忘了给客户端返回响应。

修改后的控制器代码

add: async (req, res) => {
    try {
        const data = new FormData();
        data.append("trid", "");
        data.append("order_no", "");
        data.append("customer_name", "Ashutosh");
        data.append("customer_email", "ashutosh@gmail.com");
        data.append("customer_mobile", "");
        data.append("app_id", "2");
        data.append("id", "");
        data.append("cid", "");
        data.append("token", "");
        data.append("category", "Administrative");
        data.append("sub_category", "General Ticket");
        data.append("other", "");
        data.append("priority", "High");
        data.append("description", "this is description");
        data.append("amount", "");
        data.append("currency", "");
        // data.append("file_1", fs.createReadStream("D6Qe4Dd7b/logo256.png"));

        const config = {
            method: "post",
            url: "https://dev.llp.cpm/api/Saveticket/save",
            headers: {
                ...data.getHeaders(), // 直接使用FormData生成的完整请求头
            },
            data: data,
        };

        const response = await axios(config);
        console.log(JSON.stringify(response.data));
        res.status(200).json(response.data); // 向客户端返回外部API的响应
    } catch (error) {
        console.log("error", error);
        // 向客户端返回错误信息
        res.status(error.response?.status || 500).json({ 
            error: error.message,
            detail: error.response?.data 
        });
    }
}

额外排查点

  • 若恢复文件上传,确保文件路径正确,且Node.js有读取该文件的权限。
  • 可以添加Axios请求拦截器,打印实际发送的请求头,和Postman的请求头对比,确认boundary参数是否存在:
    axios.interceptors.request.use(config => {
        console.log('Request Headers:', config.headers);
        return config;
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:05:19