uni-app使用uniCloud时做类似于拦截器和请求结果再处理(类似于请求和响应拦截)

代码哈士奇 106 0 0

想要在使用uniCloud的使用拦截请求怎么办 再次封装uniCloud.callFunction

正常情况下 我们使用uniCloud.callFunction

uniCloud.callFunction({
    name: 'xxx'
})

结合uni-id后请求时需要携带token 或者需要携带一些认证参数怎么办呢 总不能一个一个的写吧 那太麻烦了

我们对他进行一次封装

根目录下新建一个目录 根据需求命名 新建index.js文件

@TOC

通用请求

当请求为0(根据需求调整)的时候请求成功 否则只返回相应的code(也可以返回msg等)

封装

const req = (funName,params)=>{
    const token = uni.getStorageSync('xxxx')
    if(!token){
        //没有token 跳转登陆
    }
    return new Promise((resolve)=>{
        uniCloud.callFunction({
            name:funName,
            data:{
                params
            },
            success:res=>{
                if(res.result.code==0){
                    resolve(res.result)
                }else{
                    resolve(res.result.code)
                }
            },
            fail:()=>{
                resolve(false)
            }
        })
    })
}

module.exports = {
    req
}

调用

在main.js中

import Vue from 'vue'
import App from './App'
import reqFun from './reqFun/index.js'

Vue.prototype.$reqFun = reqFun

Vue.config.productionTip = false

App.mpType = 'app'

const app = new Vue({
    ...App
})
app.$mount()

在需要调用的地方

test() {
    this.$reqFun.req(funName, params).then(res => {

    })
}

登陆注册

const loginOrRegister = (params)=>{
    return new Promise((resolve)=>{
        uniCloud.callFunction({
            name:'login/register',
            data:{
                params
            },
            success:res=>{
                if(res.result.code==0){
                    resolve(res.result)
                }else{
                    resolve(res.result.code)
                }
            },
            fail:()=>{
                resolve(false)
            }
        })
    })
}

整个文件

const req = (funName,params)=>{
    const token = uni.getStorageSync('xxxx')
    if(!token){
        //没有token 跳转登陆
    }
    return new Promise((resolve)=>{
        uniCloud.callFunction({
            name:funName,
            data:{
                params
            },
            success:res=>{
                if(res.result.code==0){
                    resolve(res.result)
                }else{
                    resolve(res.result.code)
                }
            },
            fail:()=>{
                resolve(false)
            }
        })
    })
}

const loginOrRegister = (params)=>{
    return new Promise((resolve)=>{
        uniCloud.callFunction({
            name:'login/register',
            data:{
                params
            },
            success:res=>{
                if(res.result.code==0){
                    resolve(res.result)
                }else{
                    resolve(res.result.code)
                }
            },
            fail:()=>{
                resolve(false)
            }
        })
    })
}


module.exports = {
    req,
    loginOrRegister
}

调用方法和通用调用一样






欢迎加入交流群 974178910 535620886

  大家好,我是代码哈士奇,是一名软件学院网络工程的学生,因为我是“狗”,狗走千里吃肉。想把大学期间学的东西和大家分享,和大家一起进步。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!博客主页:https://blog.csdn.net/qq_42027681

未经本人允许,禁止转载

在这里插入图片描述

预览图
收藏
评论区