τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. Λόγοι
Για παράδειγμα, σε ορισμένες επιχειρηματικές λογικές, είναι απαραίτητο να εμφανιστεί το εφέ φόρτωσης πριν από το αίτημα ή να προσδιοριστεί εάν οι πληροφορίες ταυτότητας (κουπόνι) και άλλες πληροφορίες έχουν λήξει κατά τη σύνδεση και να παρέχετε τις αντίστοιχες άμεσες πληροφορίες με βάση τον κωδικό κώδικα επιστράφηκε από τον διακομιστή. Κάποια από τη λογική που γίνεται πριν και μετά το αίτημα μπορεί να υλοποιηθεί με δευτερεύουσα ενθυλάκωση των αιτημάτων axios.
2. Ειδική συσκευασία
Αυτή είναι μια μορφή συσκευασίας axios Υπάρχουν πολλές μορφές, οι οποίες θα πρέπει να καθοριστούν ανάλογα με τις συγκεκριμένες επιχειρηματικές ανάγκες. Υπάρχουν συγκεκριμένα σχόλια στον συγκεκριμένο κώδικα. Χωρίς περαιτέρω καθυστέρηση, ας πάμε απευθείας στον συγκεκριμένο κωδικό για αναφορά!
- // axios的封装
- import axios, { HttpStatusCode } from "axios";
- import { useRouter } from "vue-router";
-
- // 生产环境
- const baseURLProd = "https://mall.quanrui.cc/api/v1/backend/";
- // 测试环境
- const baseURLDev = "http://139.9.197.13:8088/api/v1/backend/";
- const baseURL = baseURLDev; //更改baseurl
-
- // 使用路由
- const router = useRouter();
-
- // 设置请求头
- axios.defaults.headers.post["Content-Type"] =
- "application/x-www-form-urlencoded;charset=UTF-8";
-
- // 创建axios示实例
- let instance = axios.create({
- baseURL: baseURL, //设置baseurl
- timeout: 5000, //超时时间
- });
-
- // 跳转到登录页面,如果没有登录,或者登录信息过期的话
- // 携带当前页面路由,以期在登录页面完成登录后返回当前页面
- const toLogin = () => {
- router.replace({
- path: "/login",
- query: {
- redirect: router.currentRoute.fullPath,
- },
- });
- };
-
- // 提示信息,Toast这个是第三方组件,根据使用的UI组件库不同进行更换
- const tip = msg => {
- Toast({
- message: msg,
- duration: 1000,
- forbidClick: true
- });
- }
-
- // 请求拦截器
- // (主要是在请求的时候携带请求token,以协助后端进行判断身份信息是否过期等),或者还可以在此增加业务操作,比如请求之前展示loading效果,具体可以拿个第三方UI库的一个效果过来使用
- axios.interceptors.request.use(
- config => {
- // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
- // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
- const token = store.state.token;
- token && (config.headers.Authorization = token);
- return config;
- },
- error => {
- return Promise.error(error);
- }
- );
-
- // 响应拦截器(主要对code进行判断,提示用户进行操作)
- axios.interceptors.response.use(
- response => {
- if (response.status === 200) {
- return Promise.resolve(response);
- } else {
- return Promise.reject(response);
- }
- },
- // 服务器状态码不是200的情况
- error => {
- if (error.response.status) {
- switch (error.response.status) {
- // 401: 未登录
- // 未登录则跳转登录页面,并携带当前页面的路径
- // 在登录成功后返回当前页面,这一步需要在登录页操作。
- case 401:
- tip("未登录,请先登录");
- setTimeout(()=> {
- toLogin();
- },1000)
- break;
- // 403 token过期
- // 登录过期对用户进行提示
- // 清除本地token和清空vuex中token对象
- // 跳转登录页面
- case 403:
- tip("登录过期,请重新登录");
- // 清除token
- localStorage.removeItem("token"); //如果存在了浏览器的localStorage
- // store.commit("loginSuccess", null); //如果存在store里的登录状态,获取其它相关信息
- // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面
- setTimeout(() => {
- toLogin();
- }, 1000);
- break;
- // 404请求不存在
- case 404:
- tip("网络请求不存在");
- break;
- // 其他错误,直接抛出错误提示
- default:
- tip(error.response.data.message);
- break;
- }
- return Promise.reject(error.response);
- }
- }
- );
-
- //get方法
- export function get(url, params){
- return new Promise((resolve, reject) =>{
- axios.get(url, {
- params: params
- })
- .then(res => {
- resolve(res.data);
- })
- .catch(err => {
- reject(err.data)
- })
- });
- }
-
- //post方法
- export function post(url, params) {
- return new Promise((resolve, reject) => {
- axios.post(url, JSON.stringify(params))
- .then(res => {
- resolve(res.data);
- })
- .catch(err => {
- reject(err.data)
- })
- });
- }
-
- // put方法
- export function put(url, params){
- return new Promise((resolve, reject) =>{
- axios.put(url, {
- params: params
- })
- .then(res => {
- resolve(res.data);
- })
- .catch(err => {
- reject(err.data)
- })
- });
- }
-
- // delete方法
- export function del(url, params){
- return new Promise((resolve, reject) =>{
- axios.delete(url, {
- params: params
- })
- .then(res => {
- resolve(res.data);
- })
- .catch(err => {
- reject(err.data)
- })
- });
- }
-
- // 导出实例
- export default instance;
3. Ενιαία διαχείριση αιτημάτων
Δημιουργήστε έναν φάκελο για την αποθήκευση των αιτημάτων της διεπαφής Όταν τον χρησιμοποιείτε, χρειάζεται μόνο να εξαγάγετε τη μέθοδο αιτήματος και να τη διαχειρίζεστε ομοιόμορφα. Διαφορετικά, όλα θα συσσωρευτούν στη σελίδα και μια μεγάλη σειρά κωδικών θα είναι λίγο άσχημη!
Αρχικά, εξάγετε τη συγκεκριμένη μέθοδο αιτήματος από το ενθυλακωμένο axios μας.
Παράδειγμα παρακάτω:
4. Χρήση στη σελίδα
Πρώτα εξάγετε τη συγκεκριμένη μέθοδο της διεπαφής αιτήματος
import { pwlogin } from "../api/login";
χρήση:
- getloginres() {
- pwlogin(data)
- .then((res) => {
- //数据处理
- })
- .catch((err) => console.log(err));
- }
Αυτά είναι όλα ευπρόσδεκτα!