<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        詳解mpvue開發小程序小總結

        來源:懂視網 責編:小采 時間:2020-11-27 22:11:06
        文檔

        詳解mpvue開發小程序小總結

        詳解mpvue開發小程序小總結:最近用mpvue開發了一個小程序,現總結一下碰見的問題及解決方案 1.項目中數據請求用到了fly.io,封裝成request.js如下: import wx from 'wx' import Fly from 'flyio' import store from '../store/index' const fl
        推薦度:
        導讀詳解mpvue開發小程序小總結:最近用mpvue開發了一個小程序,現總結一下碰見的問題及解決方案 1.項目中數據請求用到了fly.io,封裝成request.js如下: import wx from 'wx' import Fly from 'flyio' import store from '../store/index' const fl

        最近用mpvue開發了一個小程序,現總結一下碰見的問題及解決方案

        1.項目中數據請求用到了fly.io,封裝成request.js如下:

        import wx from 'wx'
        import Fly from 'flyio'
        import store from '../store/index'
        
        const fly = new Fly()
        
        fly.config.baseURL = process.env.BASE_URL
        fly.config.timeout = 5000
        
        //http 請求攔截器
        fly.interceptors.request.use((config) => {
         wx.showNavigationBarLoading()//導航條加載動畫
         //給所有請求添加自定義header
         if (store.getters.accessToken) {
         config.headers['Authorization'] = `JWT ${store.getters.accessToken}`
         }
         config.headers['X-Tag'] = 'flyio'
         return config
        })
        
        //http 響應攔截器
        fly.interceptors.response.use((response) => {
         wx.hideNavigationBarLoading()//導航條加載動畫
         const res = response.data
         if (res.status === 0 && (res.errCode === 401 || res.errCode === 403)) {
         //跳轉到登錄頁面
         wx.redirectTo({
         url: '/pages/welcome/main',
         })
         }
         return res
         },
         (err) => {
         wx.hideNavigationBarLoading()//導航條加載動畫
         //發生網絡錯誤后會走到這里
         return Promise.reject(err.response)
         },
        )
        
        export default fly

        2.有關登錄的處理:

        這個項目中用到了一個登錄頁,用戶登錄態失效也會跳轉到登錄頁login.js

        import wx from 'wx'
        import { loginByCode } from '../api/weAppAuth' //登錄接口
        import store from '../store'
        
        /**
         * 登錄
         * @returns {Promise<any>}
         */
        export function weAppLogin () {
         return new Promise((resolve, reject) => {
         // 先調用 wx.login 獲取到 code
         wx.login({
         success: (res) => {
         wx.getUserInfo({
         lang: 'zh_CN',
         success: ({rawData, signature, encryptedData, iv, userInfo}) => {
         let data = {
         code: res.code,
         rawData,
         signature,
         encryptedData,
         iv,
         userInfo,
         }
         // console.log(JSON.stringify(data))
         loginByCode(data).then(res => {
         // 該為我們后端的邏輯 若code > 0為登錄成功,其他情況皆為異常 (視自身情況而定)
         if (res.status === 1) {
         // 保存用戶信息相關操作
         ...
         resolve(res)
         } else {
         reject(res)
         }
         }).catch(err => {
         reject(err)
         })
         },
         // 若獲取不到用戶信息 (最大可能是用戶授權不允許,也有可能是網絡請求失敗,但該情況很少)
         fail: (err) => {
         reject(err)
         },
         })
         },
         })
         })
        }
        
        

        welcome.vue

         <button
         class="default-btn "
         open-type="getUserInfo"
         @getuserinfo="onGotUserInfo"
         type="primary"
         >
         微信登錄
        </button>
        
         methods: {
         //登錄
         onGotUserInfo ({mp}) {
         const {detail} = mp
         if (!detail.rawData) {
         Dialog({
         title: '重新授權',
         message: '需要獲取您的公開信息(昵稱、頭像等),請點擊"微信登錄"進行授權',
         confirmButtonText: '確定',
         confirmButtonColor: '#373737',
         })
         } else {
         weAppLogin().then(res => {
         console.log(res)
         Toast({
         type: 'success',
         message: '登錄成功',
         selector: '#zan-toast-test',
         timeout:1000
         })
         setTimeout(() => {
         wx.switchTab({
         url: '/pages/index/main',
         })
         }, 1000)
         }).catch(err => {
         console.log(err)
         })
         }
         },
         },
        
        

        3.支付方法封裝成promise

        import wx from 'wx'
        
        /**
         * 支付
         * @param data
         * @returns {Promise<any>}
         */
        export function wechatPay (data) {
         const {timeStamp, nonceStr, signType, paySign} = data
         return new Promise((resolve, reject) => {
         wx.requestPayment({
         timeStamp: timeStamp,
         nonceStr: nonceStr,
         package: data.package,
         signType: signType,
         paySign: paySign,
         success: (res) => {
         resolve(res)
         },
         fail: (err) => {
         reject(err)
         },
         })
         })
        }
        
        

        4.使用騰訊云存儲上傳圖片

        項目中使用了cos-wx-sdk-v5

        封裝upload.js方法:

        const COS = require('../../static/js/cos-wx-sdk-v5')
        import fly from './request'
        
        export const Bucket = process.env.Bucket
        export const Region = process.env.Region
        
        // 文件擴展名提取
        export function fileType (fileName) {
         return fileName.substring(fileName.lastIndexOf('.') + 1)
        }
        
        // 名稱定義
        export function path(id, type, fileType) {
         const date = new Date()
         const year = date.getFullYear()
         const month = date.getMonth() + 1
         const day = date.getDate()
         var time = date.toTimeString()
         time = time.substr(0, 8)
         time = time.replace(/:/g, '-')
         return `/mobile/groups/${id}/${type}/` +
         (year + '-' + (month < 10 ? '0' + month : String(month)) + '-' +
         (day < 10 ? '0' + day : String(day)) + '-' + time) + '.' + fileType
        }
        
        // base64轉換成file文件
        export function Base64ToBlob (urlData) {
         // 去掉url的頭,并轉換為byte
         let bytes = window.atob(urlData.split(',')[1])
        
         // 處理異常,將ascii碼小于0的轉換為大于0
         let ab = new ArrayBuffer(bytes.length)
         let ia = new Uint8Array(ab)
         for (let i = 0; i < bytes.length; i++) {
         ia[i] = bytes.charCodeAt(i)
         }
         return new Blob([ab], {
         type: 'image/png',
         })
        }
        
        export const cos = new COS({
         getAuthorization: (options, callback) => {
         let url = '/qcloud/cos_sign'
         fly.request({
         url: url,
         method: 'post',
         body: {
         method: (options.Method || 'get').toLowerCase(),
         pathname: '/' + (options.Key || ''),
         },
         }).then(res => {
         callback(res.data.authorization)
         }).catch(err => {
         console.log(err)
         })
        
         //本地測試
         /*let authorization = COS.getAuthorization({
         SecretId: '你的id',
         SecretKey: '你的key',
         Method: options.Method,
         Key: options.Key,
         })
         callback(authorization)*/
         },
        })
        
        

        小程序上傳多圖時保證圖片均上傳到cos服務器再執行其余操作:

        //選擇圖片
        chooseImage () {
         wx.chooseImage({
         count: this.chooseImageNum,
         sizeType: ['original'],
         sourceType: ['album', 'camera'],
         success: (res) => {
         this.imageList = [...this.imageList, ...res.tempFilePaths]
         },
         })
        
        },
        
        uploadImg (data, index) {
         return new Promise((resolve, reject) => {
         let filePath = data
         let fileName = path(this.id, 'test',
         fileType(filePath.substr(filePath.lastIndexOf('/') + 1))) + index
         cos.postObject({
         Bucket: Bucket,
         Region: Region,
         Key: fileName,
         FilePath: filePath,
         }, (err, res) => {
         if (res.statusCode === 200) {
         let item = {
         imageUrl: res.Location,
         }
         this.data.imageList.push(item)
         resolve(res)
         } else {
         reject(err)
         }
         })
        
         })
        },
        //上傳圖片
         upload () {
         return new Promise((resolve, reject) => {
         //沒有圖片
         if (this.imageList.length === 0) {
         let data = {
         statusCode: 200,
         }
         resolve(data)
         return
         }
         //有圖片
         let all = []
         for (let i = 0; i < this.imageList.length; i++) {
         all.push(this.uploadImg(this.imageList[i], i))
         }
         Promise.all(all).then(res => {
         resolve(res)
         }).catch(err => {
         reject(err)
         })
         })
        },
        
        handleSubmit(){
         this.upload().then(res=>{
         //執行剩余步驟
         }).catch(err=>{
         console.log(err)
         })
        }
        

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        詳解mpvue開發小程序小總結

        詳解mpvue開發小程序小總結:最近用mpvue開發了一個小程序,現總結一下碰見的問題及解決方案 1.項目中數據請求用到了fly.io,封裝成request.js如下: import wx from 'wx' import Fly from 'flyio' import store from '../store/index' const fl
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲av永久无码嘿嘿嘿| 亚洲尹人九九大色香蕉网站| 亚洲人成人伊人成综合网无码| 在线人成精品免费视频| 精品亚洲麻豆1区2区3区| 最近免费中文字幕高清大全 | 一级黄色免费大片| 亚洲熟女乱综合一区二区| 久久国产精品免费一区| 亚洲乱码日产一区三区| 久久久久国色av免费看| 亚洲精品福利网站| 亚洲三级高清免费| 亚洲日韩亚洲另类激情文学| 国产男女猛烈无遮挡免费视频| 理论秋霞在线看免费| 亚洲一级片免费看| 一个人免费视频观看在线www| 久久亚洲AV无码精品色午夜| 动漫黄网站免费永久在线观看| 亚洲国产成人精品无码区花野真一| 国产在线19禁免费观看| 久青草视频在线观看免费| 亚洲日本一区二区三区| 久久不见久久见免费影院| 色偷偷亚洲男人天堂| 国产gv天堂亚洲国产gv刚刚碰| 久久这里只精品国产免费10| 亚洲人xxx日本人18| 亚洲麻豆精品国偷自产在线91| 91免费福利视频| 亚洲 日韩 色 图网站| 成人亚洲综合天堂| 免费人成黄页在线观看日本| 7777久久亚洲中文字幕| 亚洲熟女乱综合一区二区| 99国产精品永久免费视频| 四虎影视久久久免费观看| 久久久久亚洲av无码专区 | 国产V片在线播放免费无码| 久久精品亚洲中文字幕无码网站|