薇图
薇图
  • 发布:2023-09-26 17:59
  • 更新:2024-03-06 17:39
  • 阅读:239

封装uni.request后,启用SSR报错 TypeError: uni.addInterceptor is not a function

分类:uni-app
import { authStore } from '@/stores/auth'  

import type { R } from "@/types/r"  

/***  
统一拦截请求  
**/  

/** 请求的地址前缀 **/  
const requestUrlPrefix = "http://m.xxx.com"  

const authUserStore = authStore()  

const TOKEN_WEB_PREFIX = "Bearer ";  

const requestIntercept = {  
    // 之前触发  
    invoke(options : UniApp.RequestOptions) {  
        options.timeout = 10000  
        options.url = requestUrlPrefix + options.url  
        options.header = {  
            ...options.header,  
        }  
        if (authUserStore.isLogin()) {  
            options.header.Authorization = TOKEN_WEB_PREFIX + authUserStore.getToken()  
        }  
        // console.log("invoke ", options);  

    }  

}  

// 普通请求  
uni.addInterceptor("request", requestIntercept)  
// 上传文件  
uni.addInterceptor("uploadFile", requestIntercept)  

// 2.2 添加类型,支持泛型  
export const request = <T>(options : UniApp.RequestOptions) => {  
    // 1. 返回 Promise 对象  
    return new Promise<R<T>>((resolve, reject) => {  
        uni.request({  
            ...options,  
            // 响应成功  
            success(res) {  
                // 状态码 2xx, axios 就是这样设计的  
                if (res.statusCode >= 200 && res.statusCode < 300) {  
                    // 2.1 提取核心数据 res.data  
                    const result = res.data as R<T>  

                    if (result.code == 200) {  
                        resolve(result)  
                    } else if (401 == result.code) {  
                        // 401错误  -> 可能是没登录或者token失效了  清理用户信息,跳转到登录页  
                        authUserStore.reset()  
                        uni.navigateTo({ url: '/pages/login/login' })  
                        reject(res)  
                    } else {  
                        // 默认的错误提示, 401 不提示  
                        if (!result.errorPromptMode) {  
                            uni.showToast({  
                                icon: 'none',  
                                title: (res.data as R<T>).msg || '服务器繁忙,请稍后再试',  
                            })  
                        }  
                    }  

                } else if (res.statusCode === 401) {  
                    // 401错误  -> 可能是没登录或者token失效了  清理用户信息,跳转到登录页  
                    authUserStore.reset()  
                    uni.navigateTo({ url: '/pages/login/login' })  
                    reject(res)  
                } else {  
                    // 其他错误 -> 根据后端错误信息轻提示  
                    uni.showToast({  
                        icon: 'none',  
                        title: (res.data as R<T>).msg || '服务器繁忙,请稍后再试',  
                    })  
                    reject(res)  
                }  
            },  
            // 响应失败  
            fail(err) {  
                uni.showToast({  
                    icon: 'none',  
                    title: '网络错误,换个网络试试',  
                })  
                reject(err)  
            },  
        })  
    })  
}
2023-09-26 17:59 负责人:无 分享
已邀请:
钱缺缺

钱缺缺

都没有人回答 我是Uncaught ReferenceError: uni is not defined

要回复问题请先登录注册