美文网首页
8-4、自定义合法化状态码

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

作者: Eileen_1d88 | 来源:发表于2019-12-17 14:39 被阅读0次
需求

之前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')
})

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

相关文章

网友评论

      本文标题:8-4、自定义合法化状态码

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