91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

小程序request封裝的詳細流程

發布時間:2021-09-13 14:34:18 來源:億速云 閱讀:260 作者:chen 欄目:移動開發

這篇文章主要講解了“小程序request封裝的詳細流程”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“小程序request封裝的詳細流程”吧!

背景

之前小程序代碼混亂,所以新項目一開始就準備弄個微信小程序的 request 的封裝

流程

先來說說整個流程:

1.appjs 里面已進入就去獲取用戶信息,如果沒有登錄則默認登錄,這里不做錯誤處理

2.用戶必須同意授權才能進行操作,如果不同意授權則會一直跳轉到授權頁面

undefined

app.js

onLaunch 里面獲取用戶信息

appSelf = this;
        // 應用程序第一次進入,獲取用戶信息,不做任何錯誤處理
        userInfo().then( (res)=>{
            console.log(res);// 打印結果
            if (!res.code) {
                appSelf.globalData.userInfo = res
            }
        }).catch( (errMsg)=>{
            console.log(errMsg);// 錯誤提示信息
        });

httpUtils.js

request 的封裝

const request = function (path, method, data, header) {
    let user_id = "";
    let token = "";
    try {
        user_id = wx.getStorageSync(USER_ID_KEY);
        token = wx.getStorageSync(TOKEN_KEY);
    } catch (e) {}
    header = header || {};
    let cookie = [];
    cookie.push("USERID=" + user_id);
    cookie.push("TOKEN=" + token);
    cookie.push("device=" + 1);
    cookie.push("app_name=" + 1);
    cookie.push("app_version=" + ENV_VERSION);
    cookie.push("channel=" + 1);
    header.cookie = cookie.join("; ");
    return new Promise((resolve, reject) => {
        wx.request({//后臺請求
            url: API_BASE_URL + path,
            header: header,
            method: method,
            data: data,
            success: function (res) {
                if (res.statusCode !== 200) {
                    reject(res.data)
                } else {
                    if (res.data.code === 20006) {
                        login().then( (res)=>{
                            resolve(res)
                        }).catch( (errMsg)=>{
                            reject(errMsg);
                        })
                    }
                    resolve(res.data)
                }
            },
            fail: function (res) {
                reject("not data");
            }
        });
    });
}

login

const login = function () {
    try {
        wx.removeStorageSync(USER_ID_KEY)
        wx.removeStorageSync(TOKEN_KEY)
    } catch (e) {}
    return new Promise((resolve, reject) => {
        wx.login({
            success: res => {
                let code = res.code;
                // 已經授權,可以直接調用 getUserInfo 獲取頭像昵稱,不會彈框
                wx.getUserInfo({
                    withCredentials: true,
                    success: res => {
                        let userInfo = res.userInfo;
                        let name = userInfo.nickName;
                        let avatar = userInfo.avatarUrl;
                        let sex = userInfo.gender;
                        let data = {
                            code: code,
                            encryptedData: res.encryptedData,
                            iv: res.iv,
                            name: name,
                            avatar: avatar,
                            sex: sex,
                            from: FROM,
                        };
                        request("/api/user/login/byWeChatApplet", "POST", data).then( (res)=>{
                            if (!res.code) {
                                try {
                                    wx.setStorageSync(USER_ID_KEY, res.user_id);
                                    wx.setStorageSync(TOKEN_KEY, res.token)
                                } catch (e) {
                                    reject(JSON.stringify(e));
                                }
                            }
                            resolve(res)
                        }).catch( (errMsg)=>{
                            reject(errMsg)
                        });
                    },
                    fail: function (res) {
                        console.log(res);

                        if (res.errMsg && res.errMsg.startsWith("getUserInfo:fail") && res.errMsg.search("unauthorized") != -1) {
                            // 跳轉授權頁面
                            wx.navigateTo({
                                url: '/pages/auth/auth'
                            })
                            return;
                        }
                        wx.getSetting({
                            success: (res) => {
                                if (!res.authSetting["scope.userInfo"]) {
                                    // 跳轉授權頁面
                                    wx.navigateTo({
                                        url: '/pages/auth/auth'
                                    })
                                }
                            }
                        });
                    }
                })
            }
        })
    });
};

auth.js

授權頁面 js

Page({
    data: {
    },
    onLoad: function () {
        self = this;
    },

    auth: function (e) {
        console.log(app.globalData.userInfo);
        if (e.detail.userInfo) {
            login().then( (res)=>{
                console.log(res);// 打印結果
                if (res.code) {
                    // 接口錯誤
                    return
                }
                // 跳轉回上一個頁面
                wx.navigateBack()
            }).catch( (errMsg)=>{
                console.log(errMsg);// 錯誤提示信息
            });
        }
    },

});

感謝各位的閱讀,以上就是“小程序request封裝的詳細流程”的內容了,經過本文的學習后,相信大家對小程序request封裝的詳細流程這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沾化县| 浙江省| 湄潭县| 曲周县| 岳池县| 平阴县| 东阿县| 武义县| 房产| 惠水县| 呈贡县| 兴义市| 连城县| 工布江达县| 克山县| 竹北市| 昭通市| 黄石市| 尉犁县| 宝应县| 琼结县| 哈巴河县| 齐河县| 商丘市| 长葛市| 嘉义县| 石阡县| 大英县| 小金县| 玉门市| 韩城市| 兴宁市| 常山县| 迁西县| 龙里县| 天峨县| 永善县| 辽宁省| 增城市| 额济纳旗| 开阳县|