8-4、自定义合法化状态码

需求

之前ts-axios在处理响应结果的时候,认为HTTP status在200和300之间是一个合法值,在这个区间之外则创建一个错误。有些时候我们想自定义这个规则,比如认为304也是一个合法的状态码,所以我们希望ts-axios能提供一个配置,允许我们自定义合法状态码规则,如:

axios.get('/more/304', {
  validateStatus(status) {
    return status >= 200 && status < 400
  }
}).then(res => {
  console.log(res)
}).catch((e: AxiosError) => {
  console.log(e.message)
})

通过在请求配置中配置一个validateStatus函数,它可以根据参数status来自定义合法状态码的规则。

代码实现

首先修改类型定义:

interface AxiosRequestConfig {
  // ...
  validateStatus?: (status: number) => boolean
}

接着修改默认配置规则:

const defaults: AxiosRequestConfig = {
  // ...
  validateStatus(status: number): boolean {
    return status >= 200 && status < 300
  },
}

修改xhr.ts

function handleResponse(response: AxiosResponse) {
    if (validateStatus!(response.status)) {
        resolve(response)
      } else {
        reject(createError(`Request failed width status code ${response.status}`, config, null, request, response))
      }
    }

demo

// client
axios.post('/api/extend/post',{}, {
  validateStatus(status: number): boolean {
    return (status >= 200 && status < 300) || status === 304
  }
})

// server
router.post('/extend/post', function(req, res) {
  res.status(304)
  res.send('status 304')
})

可以看到,这个请求并没有报错,正常返回。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容