аксиомыгитхаб-адрес документация по переводу axios
предисловие
напиши раньше小程序
проект хоть и простойpromise
Пакет, количество кода намного меньше,Но для обработки данных в обратном вызове, многие коды подтвержденияТакой жеДа, код очень неудобно писать,
Например
Данные, возвращаемые серверной частью
нормальные обстоятельства
data: {
result: 1,
metMsg: '', // 正常情况没有错误信息
data: {
// 数据
}
}
Бэкенд находится на техническом обслуживании, временно недоступен
data: {
result: 2, // 表示不正常
metMsg: '告诉前端/用户的错误信息',
data: {}
}
Об этом нужно судить в обратном вызове каждого запроса
.then(res => {
if(res.data.result == 1) {
// ... 下面的一系列操作
} else {
// ... 错误提示
}
})
Один-два могут ничего не почувствовать, но писать такой повторяющийся код сотни раз на десятки страниц очень больно.
Очень нужно拦截器
Что-то вроде этого помогло мне решить эту проблему, wechatrequest
API для перехватчиков не существует. Разработчики должны сами инкапсулировать перехватчик. В следующий раз, когда вы будете писать небольшую программу, вы можете попробовать написать ее.
перейти к делу
Вышеупомянутые болевые точки разработки могут быть хорошо решены с помощью axios, потому что axios предоставляет перехватчик (собачья голова).
Здесь фронтенд-студенты и бэкэнд-студенты определяют параметры до начала проекта, а фронтенд может инкапсулировать аксиомы.
Например
data: {
result: , // 1 为正常 2 为不正常 3 ....
metMsg: '为什么不正常的原因',
data: {} // 1 返回data 其他都不返回
}
Он может быть упакован в соответствии с правилами
/utils/index(пакет аксиом)
import axios from 'axios'
import { Alert } from 'react-native'
//请求拦截器
axios.interceptors.request.use(
function(config) {
// 添加响应头等等设置
config.headers.userToken = 'this is my token'
return config
},
function(error) {
return Promise.reject(error) // 请求出错
}
)
//返回拦截器
axios.interceptors.response.use(
function(response) {
if (response.data.data.result != 1) {
let { retMsg } = response.data.data
// 服务端出现了一些问题的情况下
Alert.alert('温馨提示', retMsg)
// 等等按钮事件
return Promise.reject(retMsg)
} else {
// 服务端一切正常 返回data数据
return response.data
}
},
function(error) {
return Promise.reject(error)
}
)
const defaultData = {}
const defatltUrl = ''
function PostAxios(url = defatltUrl, data = defaultData) {
return axios({
method: 'POST',
url,
data
})
}
function GetAxios(url = defatltUrl, data = defaultData) {
return axios({
method: 'GET',
url,
data
})
}
export default {
PostAxios,
GetAxios
}
Публичная часть проекта, которая инициирует запрос, например.header
заголовок и т.д. данные записываются в请求拦截器
середина
Публичная часть корректного обратного вызова в проекте, например, бэкенд с вынесенным вердиктом написан на返回拦截器
середина
Итак, мы напишем бизнес-код код запроса внутри очень, очень удобно
код проекта
import response from '/utils/response' // 请求地址
import utils from '/utils/index' // axios的封装
//react
componentDidMount() {
utils.GetAxios(response.listData) // header信息封装在请求拦截器中
.then(res => {// 因为错误情况已经在返回拦截器中进行的处理,所以业务代码不再需要判断正误
this.setState({
city: res.data.data
})
})
.catch(res => {}) // RN进行错误处理....
}
Ежедневная сводка, в интернете уже много статей про упаковку axios.Не нравится - не распыляйтесь~~~