1. Зачем инкапсулировать?
- Это удобно для общего вызова кода, публичной обработки запросов и персонализированной настройки.
2. Другие инкапсулировали многое, почему бы напрямую не модифицировать и не использовать?
- Идеи упаковки не подходят для собственных проектов
- Неудобно вызывать после инкапсуляции
3. Демонстрация персонального пакета
Структура кода [на основе vue]
Основная идея
- Храните все адреса интерфейсов запросов в соответствии с файловыми модулями, такими как модули запроса/модуля/пользователя, связанные с информацией о пользователе [Сервисы].
2. Инкапсулируйте методы и классы. Привяжите общие методы запроса ко всем запросам и обработайте параметры пути в URL-адресах запросов.
generateServer.js
import server from "../util/axiosConfig";
// 修改axios基本配置,请求配置
function request({
url,
method = "get",
queryParm = {},
body = {},
pathParm = null,
config = {},
}) {
const configAxios = {
method,
...config,
url: dealRequestUrl(url, pathParm),
};
switch (method) {
case "get":
configAxios.params = queryParm;
break;
default:
// 请求方法 'PUT', 'POST', 和 'PATCH'
configAxios.data = body;
break;
}
console.log('configAxios', configAxios)
return server(configAxios);
}
function dealRequestUrl(url, pathParm) {
if (!pathParm) return url;
let dealurl = url;
Object.keys(pathParm).forEach((ele) => {
dealurl = dealurl.replace(`{${ele}}`, pathParm[ele]);
});
return dealurl;
}
class GenerateServer {
constructor(url) {
this.url = url;
}
getdata(parm) {
console.log('parm', parm)
return request({ ...parm, method: "get", url: this.url });
}
postdata(parm) {
return request({ ...parm, method: "post", url: this.url });
}
deletedata(parm) {
return request({ ...parm, method: "delete", url: this.url });
}
}
export default GenerateServer;
3. Экспозиция в целом
использовать
import { userInfoServer } from "./request";
.
.
.
// 发送请求
userInfoServer.getUserName
.getdata({
queryParm: {
id: 223,
},
})
.then((res) => {
console.log("res", res);
});
// 发送请求
userInfoServer.getUserName
.postdata({
body: {
id: 223,
},
})
.then((res) => {
console.log("res", res);
});
// 发送get请求,请求路径带参数
userInfoServer.getUserList
.getdata({
queryParm: {
id: 223,
},
pathParm: {
id: 567,
},
})
.then((res) => {
console.log("res", res);
});
Резюме: вышеописанный пакет, в основном для запроса более подробного разрешения, легко поддерживать. Это также удобнее во время развития. Для новых требований интерфейса и требуется только для добавления генератора ответа конфигурации URL-адреса, расположенного в соответствующем модуле. Он сможет обрабатывать запросы в бизнес-коде внутри. Для параметров тела Path Project Past Code и Parameter Package не заботится при использовании соответствующей конфигурации.
Приведенный выше код не обрабатывает загрузку файла, получение строки параметра запроса и т. д. Но вы можете добавить конфигурацию в соответствующий axios. Легко поддерживать.
код гит:git