前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue如何实现axios.post请求

Vue如何实现axios.post请求

作者头像
沈宥
发布2024-07-11 10:21:13
1060
发布2024-07-11 10:21:13
举报
文章被收录于专栏:从头开始学习测试开发

Vue如何实现axios.post请求

背景

问题描述: 使用axios发送post请求,已经传入了body参数,且header中设置了body的编码格式,但后端 req.body接收到的参数为空 ,但是网页上抓包检查时,发现请求的body确实是携带了参数的🚧

请求参数设置

代码语言:javascript
复制
import axios from "axios"

await axios.post("/pubsys/createLodgeUnitV4", 
{
"userId":"123456",
"luId":"123",
"luInfo":"infoxxxxx",
"step":"create"
}, 
{headers: 
{"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"}
})

网页抓包数据: 参数显示为json格式,与已设置的header不符,猜测是请求body的编码出现了问题

解决步骤

1、从网页抓取的结果来看,请求体携带的确是json格式的数据,猜测axios会自动转换数据为json格式

源码上查找到了转换请求体参数格式相关代码,确认是axios的问题

代码语言:javascript
复制
if(utils.isURLSearchParams(data){
setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded');
return data.tostring();
}
if(utils.isObject(data){
setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
return JSON.stringfy(data);
}

2、引入qs解决请求参数格式问题 body-parser的urlencoded方法顾名思义就是 把传来的数据当做url来处理 ,也就是像querystring一样,所以对于传过来的json数据, 没有识别到切割key和value的标志 ,就把所有都当做key来处理

代码语言:javascript
复制
import axios from "axios"
import qs from "qs"

data : {
"userId":"123456",
"luId":"123",
"luInfo":"infoxxxxx",
"step":"create"
}

await axios.post("/pubsys/createLodgeUnitV4",  qs.stringify(data),
{headers: 
{"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"}
})

重新请求,成功

其他记录

1、 qs库

qs是axios自带的一个库 功能:

里面的stringify方法可以将一个json对象 直接转为(以?和&符连接的形式) 。在开发中,发送请求的入参大多是一个对象。在发送时,如果该请求为get请求,就需要对参数进行转化。使用该库,就可以自动转化,而不需要手动去拼接

2、引入qs后,使用时提示qs undefined 解决方式:修改引入方式为

代码语言:javascript
复制
import * as qs from 'qs'
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从头开始学习测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Vue如何实现axios.post请求
    • 背景
      • 解决步骤
      • 其他记录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档