美文网首页
三、处理post请求和请求头

三、处理post请求和请求头

作者: 雪燃归来 | 来源:发表于2020-04-18 19:29 被阅读0次

通过上两篇文章的回顾,我们已经把整个项目的框架搭建起来了,并且通过重装url实现get数据请求。本篇我们将要实现post数据请求。

一、需求分析

1、post请求使用的是config中data属性的值

axios({
  method: 'post',
  url: '/base/post',
  headers: {
    'content-type': 'application/json;charset=utf-8'
  },
  data: {
    a: 1,
    b: 2
  }
})

2、post请求中,我们要正确地处理请求头的信息,不然后端是不能正常的返回数据

二、代码实现

1、新建/src/helpers/data.ts

\color{red}{注意}:数据在传输的时候要以字符串的形式传递,所以要调用JSON.stringfy()方法

import { isPlainObject } from './util'
export function transformRequest(data: any): any {
  if (isPlainObject(data)) {
    return JSON.stringify(data)
  }
}

2、在/src/index.ts中调用该方法

function processConfig(config: AxiosRequestConfig):void{
  config.url = transformURL(config)
  config.headers = transformHeaders(config)
  config.data = transformDataRequest(config)
}  

function transformDataRequest(config: AxiosRequestConfig): string {
  return transformRequest(config.data)
}

3、处理请求头

新建/src/helpers/header.ts

import { isPlainObject } from './util'
function normalizeHeaderName(headers: any, normalizedName: string): void {
  if (!headers) {
    return
  }
  Object.keys(headers).forEach(name => {
    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
      headers[normalizedName] = headers[name]
      delete headers[name]
    }
  })
}

export function processHeaders(headers: any, data: any): any {
  normalizeHeaderName(headers, 'Content-Type')
  if (isPlainObject(data)) {
    if (headers && !headers['Content-Type']) {
      headers['Content-Type'] = 'application/json;charset=utf-8'
    }
  }
  return headers
}

代码逻辑比较直观,此处不做过多的解释。

三、工具函数简单介绍

在这几篇文章中,我们一直使用一些工具方法,为了代码的完整,我把这些工具函数贴出来。
新建/src/helpers/util.ts

const toString = Object.prototype.toString

export function isDate(val: any): val is Date {
  return toString.call(val) === '[object Date]'
}

export function isPlainObject(val: any): val is Object {
  return Object.prototype.toString.call(val) === '[object Object]'
}

要注意的是,我们在上面的函数中使用到了typescript的类型断言。

相关文章

  • 三、处理post请求和请求头

    通过上两篇文章的回顾,我们已经把整个项目的框架搭建起来了,并且通过重装url实现get数据请求。本篇我们将要实现p...

  • Get和Post的区别

    Get请求和Post请求区别如下: Post请求比Get请求更安全,get请求直接将参数放置在URL中,post请...

  • java笔试题1

    请简述http协议中get请求和post请求的区别答: 1. get请求比post请求快。 2. get请求传参时...

  • vue基础知识面试题(二)

    ref获取元素的内容: axios发送get请求: 挂载公共请求头 axios的get请求和post请求:

  • axios中get请求与post请求的简单函数封装

    axios中get请求与post请求的简单函数封装 今天写点什么呢,就写写如何将axios的post请求和get请...

  • Django系列5-请求和响应

    一. Django之GET请求和POST请求及响应处理 1.1 请求中的方法 方法描述GET请求指定的页面信息,并...

  • HTTP协议相关

    HTTP超文本传输协议 HTTP的请求方式有哪些?GET请求和POST请求的区别?HTTP请求的特点 HTTP的请...

  • 网络编程(01)NSURLConnection

    一 GET请求和POST请求的区别 GET请求和POST请求的区别主要是体现在数据的传递上. GET请求相对于PO...

  • java 面试题1(基础)

    1、请简述http协议中get请求和post请求的区别 可参考此文章 1、GET - 从指定的资源请求数据。 查询...

  • Flutter之数据请求

    目录 异步操作Future Async/await Dio引用,Get请求和POST请求的使用 数据请求和动态组件...

网友评论

      本文标题:三、处理post请求和请求头

      本文链接:https://www.haomeiwen.com/subject/vqwivhtx.html