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

Axios请求返回400错误:手动请求正常但代码调用失败

问题:Axios请求返回400错误(Undefined JSON value)

遇到AxiosError: Request failed with status code 400错误,手动测试目标URL可正常访问,但代码调用失败,控制台输出错误详情:

data: {
error: '5',
errorId: 'badRequest',
errorString: 'Internal error: Undefined JSON value.'
}

相关代码如下:

controller.js

//Set Create Session
exports.setSession = async (req, res) => {
    const data = await request({
        path: process.env.APP_LOCALHOST_URL + urlLogin.setCreateSession,
        method: 'POST',
        body: JSON.stringify(req.body)
    });
    
    return res.json(data);
}

request.js

exports.request = async ({path, method = "GET", body }) => {
    try {
        const response = await axios({
            method: method,
            url: path,
            headers: {
                'Content-Type': 'application/json'
            },
            body: body
          }); 
          return response;
    } catch (error) {
        console.log("error: ", error);
    }
}

问题根源

  1. Axios发送请求时,请求体参数应该用data而非body,你在request.js里错误使用body字段,导致后端无法解析到有效JSON数据。
  2. controller.js中手动对req.body执行JSON.stringify,但Axios会自动序列化JSON类型请求体,这会让后端收到的是字符串而非可解析的JSON对象,引发解析错误。

修复步骤

1. 修正request.js的参数传递

//file request.js
exports.request = async ({path, method = "GET", body }) => {
    try {
        const response = await axios({
            method: method,
            url: path,
            headers: {
                'Content-Type': 'application/json'
            },
            data: body // 替换body为data
          }); 
          return response.data; // 直接返回响应数据,而非完整Axios响应对象
    } catch (error) {
        console.log("error: ", error);
        throw error; // 抛出错误让上层处理,避免静默失败
    }
}

2. 修正controller.js的请求体处理

//file controller.js

//Set Create Session
exports.setSession = async (req, res) => {
    const data = await request({
        path: process.env.APP_LOCALHOST_URL + urlLogin.setCreateSession,
        method: 'POST',
        body: req.body // 移除JSON.stringify
    });
    
    return res.json(data);
}

额外说明

  • Axios规则:data用于POST/PUT/PATCH等方法的请求体,params用于GET/DELETE等方法的URL查询参数。
  • 当设置Content-Type: application/json时,Axios会自动将data中的对象序列化为JSON字符串,无需手动处理。
  • 在request.js中抛出错误,能让上层setSession捕获异常并返回对应错误响应,避免请求失败无反馈。

内容的提问来源于stack exchange,提问作者jhon estrada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:05:24