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); } }
问题根源
- Axios发送请求时,请求体参数应该用
data而非body,你在request.js里错误使用body字段,导致后端无法解析到有效JSON数据。 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
相关产品推荐
相关产品推荐

