博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
axios请求requestBody和formData
阅读量:6294 次
发布时间:2019-06-22

本文共 3798 字,大约阅读时间需要 12 分钟。

前言

在vue的后台管理开发中,应需求,需要对信息做一个校验,需要将参数传递两份过去,一份防止在body中,一份防止在formdata中,axios请求会默认将参数放在formdata中进行发送。
对前端而言其实都一样,无非就是参数的格式问题。
对后端而言
(form data)可以用request.getParameter(接收参数名)
(request payload)用request.getParameter是接收不到值,必须用输入流获取,得到字符串在转json
应需求有的接口是需要放在body中有的要放在formdata中,所以前端需要做一个灵活的处理,因为就算只是更改headers中的字段也会让人时时刻刻记得。所以最终我将请求文件封装如下:
/** * @description 配置网络请求 * @author luokaibin chaizhiyang */import axios                from 'axios'import { Message} from 'element-ui'import router               from '../router/permission'import Vue from 'vue'import VueCookies from 'vue-cookies'const moment = require('moment');const Base64 = require('js-base64').Base64;// loading框设置局部刷新,且所有请求完成后关闭loading框var loading;function startLoading() {  loading = Vue.prototype.$loading({    lock: true,    text: "Loading...",    target: document.querySelector('.loading-area')//设置加载动画区域  });}function endLoading() {  loading.close();}// 声明一个对象用于存储请求个数var needLoadingRequestCount = 0;function showFullScreenLoading() {  if (needLoadingRequestCount === 0) {    startLoading();  }  needLoadingRequestCount++;};function tryHideFullScreenLoading() {  if (needLoadingRequestCount <= 0) return;    needLoadingRequestCount--;  if (needLoadingRequestCount === 0) {    endLoading();  }};// 请求拦截axios.interceptors.request.use(config => {  let token = "";  showFullScreenLoading();  if(VueCookies.isKey('userinfo')) {     const USERINFO = VueCookies.get('userinfo');    if(config.method == 'get') {      token = Base64.encode(USERINFO.token + '|' + moment().utc().format('YYY-MM-DD HH:mm:ss' + '|' + JSON.stringify(config.params)));      config.params.hospitalId = USERINFO.hospitalId;    } else {      token = Base64.encode(USERINFO.token + '|' + moment().utc().format('YYY-MM-DD HH:mm:ss' + '|' + JSON.stringify(config.data)));      config.data.hospitalId = USERINFO.hospitalId;    }    let TOKENSTART = token.slice(0,10),        TOKENEND = token.slice(10);    token = TOKENEND + TOKENSTART;    config.headers['token'] = token;  }  return config;}, err => {  tryHideFullScreenLoading();  Message.error({ message: '请求超时!' });  return Promise.resolve(err);})// 响应拦截axios.interceptors.response.use(res => {  tryHideFullScreenLoading();  switch(res.data.code) {    case 200:    return res.data.result;    case 401:    router.push('/login');    VueCookies.remove('userinfo');    return Promise.reject(res);    case 201:    Message.error({ message: res.data.msg });    return Promise.reject(res);    default :    return Promise.reject(res);  }}, err => {  tryHideFullScreenLoading();  if(!err.response.status) {    return false;  }  switch(err.response.status) {    case 504:    Message.error({ message: '服务器被吃了⊙﹏⊙∥' });    break;    case 404:    Message.error({ message: '服务器被吃了⊙﹏⊙∥' });    break;    case 403:    Message.error({ message: '权限不足,请联系管理员!' });    break;    default:    return Promise.reject(err);  }})axios.defaults.timeout = 300000;// 请求超时5fen // RequestBodyexport const postJsonRequest = (url, params) => {  return axios({    method: 'post',    url: url,    data: params,    headers: {      'Content-Type': 'application/json',    },  });} // formDataexport const postRequest = (url, params) => {  return axios({    method: 'post',    url: url,    data: params,    transformRequest: [function (data) {      let ret = ''      for (let it in data) {        ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'      }      return ret    }],    headers: {      'Content-Type': 'application/x-www-form-urlencoded'    }  });}export const getRequest = (url, data = '') => {  return axios({    method: 'get',    params: data,    url: url,  });}
Get请求的话是不需要进行设置的,因为get请求回默认将参数放在params中,post请求的话会有两个,所以我们这里讲post请求封装了两份。其他的东西的话大家不需要查看。
由于笔者近期较忙,所以,随便抽了一下,日后整理将会更新

转载于:https://www.cnblogs.com/bgwhite/p/9964864.html

你可能感兴趣的文章
Nginx配置proxy_pass转发的/路径问题
查看>>
总编下午茶:挑战者心态能否帮助微软重回云计算巅峰?
查看>>
理解并取证:广域网上的PPP协议
查看>>
动软分享社区系统实现个性化导购营销平台
查看>>
shell编程 字符串处理
查看>>
Cisco3560交换机enable密码破解和恢复出厂设置
查看>>
交换安全老师课堂笔记
查看>>
RHEL6基础四十三之RHEL文件共享②Samba简介
查看>>
CuteEditor Html中显示Word格式粘贴的文章[CuteEditor WordToHtml]
查看>>
zabbix 二次开发之调用api接口获取历史数据
查看>>
给自己定的目标
查看>>
LAMP平台部署及应用
查看>>
Supervisor 托管服务
查看>>
分享一下收到的微软CRM云分享计划 邮件
查看>>
DVWA系列之21 存储型XSS分析与利用
查看>>
Hyper-V 2016 系列教程25 配置NFS 存储服务器
查看>>
vCloud Automation Center (vCAC) 6.0 (一)
查看>>
oracle 11g dataguard安装出现的错误
查看>>
Microsoft Dynamics CRM 2013 试用之系统篇 Windows Server 2012 R2安装
查看>>
Skype For Business 2015实战系列6:后端数据库安装CU6补丁
查看>>