Axiosの受信機
16412 ワード
AxiosのInterceptorsを使用すると、要求または応答を「後」または「catch」に処理する前にブロックできます.したがって、Axiosを使用すると、APIを使用して通信する際によく使用されるbaseURLやヘッダなど、すべてのAxios要求を一度に処理することができる.
Axios-ブロッキングの基本構造
Axios-ブロッキングの基本構造 // 요청 인터셉터 추가
axios.interceptors.request.use(
function (config) {
// 요청을 보내기 전에 수행할 일
// ...
return config;
},
function (error) {
// 오류 요청을 보내기전 수행할 일
// ...
return Promise.reject(error);
});
// 응답 인터셉터 추가
axios.interceptors.response.use(
function (response) {
// 응답 데이터를 가공
// ...
return response;
},
function (error) {
// 오류 응답을 처리
// ...
return Promise.reject(error);
});
REST APIのbaseURLとタイトルの設定
たとえば、baseURLがhttp://localhost:3000/であり、タイトルには権限とContent-Typeが含まれている必要があると仮定します.
ブロッキングを使用しない場合は、axiosを使用するすべてのREST API要求にAPIアドレスと必要なヘッダファイルを追加する必要があります.
以下のようにbaseURLやheadersを変数として使用しても、常に加入する必要があるため、面倒になります.
変数としてbaseURLとヘッダーを使用const baseURL = "http://localhost:3000/";
const options = {
headers: {
Authorization: `Bearer ${process.env.REACT_APP_KEY}`,
"Content-Type": "application/json",
},
};
get
const getData = async () => {
await axios.get(baseURL, options);
};
post
const postData = async () => {
await axios.post(baseURL, {data}, options);
};
patch
const patchData = async (todo) => {
await axios.patch(`${baseURL}/${todo.id}`, {data}, options);
};
delete
const deleteData = async (todo) => {
await axios.delete(`${baseURL}/${todo.id}`, options);
};
ブロッカーを使用してすべてのaxiosリクエストにbaseURLとheaderを追加したため、axiosリクエストのたびにbaseURLとheaderを追加する必要はなくなりました.
以前はインターセプタを使用する前にAPIリクエスト時に必要なヘッダが抜けてエラーが発生することがよくありましたが、今は別に入力しなくても自分で入ることができるのでエラーはありません.
ブロッキングを使用して、すべてのaxiosリクエストにbaseURLとheaderを挿入できます.axios.defaults.baseURL =
"http://localhost:3000/";
axios.interceptors.request.use(async (config) => {
if (!config.headers["Authorization"]) {
config.headers[
"Authorization"
] = `Bearer ${process.env.REACT_APP_KEY}`;
}
config.headers["Content-Type"] = "application/json";
return config;
});
getconst getData = async () => {
await axios.get("/");
};
postconst postData = async () => {
await axios.post("/", {data});
};
patchconst patchData = async (todo) => {
await axios.patch(`/${todo.id}`, {data});
};
deleteconst deleteData = async (todo) => {
await axios.delete(`/${todo.id}`);
};
Reference
この問題について(Axiosの受信機), 我々は、より多くの情報をここで見つけました
https://velog.io/@zinukk/Axios의-Interceptors
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
// 요청 인터셉터 추가
axios.interceptors.request.use(
function (config) {
// 요청을 보내기 전에 수행할 일
// ...
return config;
},
function (error) {
// 오류 요청을 보내기전 수행할 일
// ...
return Promise.reject(error);
});
// 응답 인터셉터 추가
axios.interceptors.response.use(
function (response) {
// 응답 데이터를 가공
// ...
return response;
},
function (error) {
// 오류 응답을 처리
// ...
return Promise.reject(error);
});
const baseURL = "http://localhost:3000/";
const options = {
headers: {
Authorization: `Bearer ${process.env.REACT_APP_KEY}`,
"Content-Type": "application/json",
},
};
get
const getData = async () => {
await axios.get(baseURL, options);
};
post
const postData = async () => {
await axios.post(baseURL, {data}, options);
};
patch
const patchData = async (todo) => {
await axios.patch(`${baseURL}/${todo.id}`, {data}, options);
};
delete
const deleteData = async (todo) => {
await axios.delete(`${baseURL}/${todo.id}`, options);
};
axios.defaults.baseURL =
"http://localhost:3000/";
axios.interceptors.request.use(async (config) => {
if (!config.headers["Authorization"]) {
config.headers[
"Authorization"
] = `Bearer ${process.env.REACT_APP_KEY}`;
}
config.headers["Content-Type"] = "application/json";
return config;
});
const getData = async () => {
await axios.get("/");
};
const postData = async () => {
await axios.post("/", {data});
};
const patchData = async (todo) => {
await axios.patch(`/${todo.id}`, {data});
};
const deleteData = async (todo) => {
await axios.delete(`/${todo.id}`);
};
Reference
この問題について(Axiosの受信機), 我々は、より多くの情報をここで見つけました https://velog.io/@zinukk/Axios의-Interceptorsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol