axios向Node.js Express后端传值失败 接收端无法获取正确计算结果
问题根因
- Express框架默认不会自动解析POST请求携带的请求体,未配置对应解析中间件时
req.body值为undefined,无法读取传参 - 发送端使用axios发POST请求时,无需手动调用
JSON.stringify序列化参数,axios默认会自动将普通对象按application/json格式序列化,手动转写反而可能触发格式异常 - 接收端路由未给客户端返回响应,会导致发送端请求持续等待直到超时
修正方案
- 接收端在路由定义前添加Express内置的JSON请求体解析中间件
express.json(),无需额外安装第三方依赖(适用于Express 4.16.0及以上版本) - 发送端移除
JSON.stringify包裹,直接传递参数对象 - 接收端处理完逻辑后给请求方返回响应,避免请求挂起
修正后完整代码
数据发送端(生产者)
const axios = require('axios'); const URL = "http://localhost:5000/" let n1 = 3 let n2 = 5 let sum = n1 + n2; axios.post(URL, { expression: sum, }) .then(function (response) { console.log('请求成功,服务端返回:', response.data); }) .catch(function (error) { console.log('请求异常:', error); });
数据接收端(Express服务)
const express = require('express') const app = express() // 注册JSON请求体解析中间件,必须放在路由定义之前 app.use(express.json()) app.post('/', (req, res) => { // 读取传递的计算结果,控制台会打印8 console.log(req.body.expression); // 返回响应给发送端 res.send({ status: 'ok', receivedValue: req.body.expression }) }) app.listen(5000, () => console.log('5000端口服务已启动'))
验证方式:先启动接收端服务,再运行发送端脚本,接收端控制台会正确打印出传递的计算结果值8。
内容的提问来源于stack exchange,提问作者oobthenewb
相关产品推荐
相关产品推荐

