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

代码哈士奇
• 阅读 1880

想要在使用uniCloud的使用拦截请求怎么办 再次封装uniCloud.callFunction 特别说明 这里的token是我自己存储成token 如果你使用了uni-id 官方的推荐是 ('uni_id_token') ('uni_id_token_expired') 存储了uni_id_token后请求会自动携带 这里的res.result.code==0是因为我的云函数请求成功返回的code均为0 如果你的不是 就根据自己需求更改

正常情况下 我们使用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

未经本人允许,禁止转载

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

点赞
收藏
评论区
推荐文章
皮卡皮卡皮 皮卡皮卡皮
2年前
「uniapp」封装请求拦截和响应拦截
uniapp官方的请求方式首先我们先看一下uni官方给开发者提供的uni.request用来网络请求的apiuni.request(url:'',method:'GET',data:,header:,success:res,fail:(),complete:());可以看到我们每次请求数据的时候都需要按照这个格式来请求,
Chase620 Chase620
3年前
记录Vue项目实现axios请求头带上token
在vue项目中首先npm命令安装axios:npminstallaxiosSaxios的封装使用请求带上token,token通过登录获取存在vuex,为防止刷新丢失token使用持久化vuexpersistedstate插件保存数据npmiSvuexpersistedstateimportpersistedStat
Chase620 Chase620
3年前
简析限流算法
简析限流算法1.简介限流顾名思义是限制流量,限制流量的目的是为了保障服务稳定运行,避免服务被流量冲垮。当流量超出服务处理能力时,部分请求将会被限流组件拦截。被拦截的请求可能会被丢弃,如果是C端请求,那么这个请求可能会被导向指定的错误页上,而不是生硬的拒绝。这里我们丢
Wesley13 Wesley13
2年前
JAVA拦截器,JAVA返回结果跨域问题解决
遇到的问题:通过拦截器做权限控制,没有权限时返回了json值,结果前端请求时提示跨域了备注:我的前端站点和后端站点不是一个地址报错1:AccesstoXMLHttpRequestat'http://localhost:8089/appcicd/appinfo/getappinfos'fromorigi
Stella981 Stella981
2年前
Cookie,Session学习(java servlet编程)
Cookie问题:HTTP协议是没有记忆功能的,一次请求结束后,相关数据会被销毁。如果第二次的请求需要使用相同的请求数据怎么办呢?难道是让用户再次请求书写吗?为了解决这个问题,引入了Cookie技术;Cookie技术其实就是浏览器端实现的数据临时存储技术,保存一些必要的数据,当访问某些网页需要这些数据时,浏览器自动将数据加到HTTP请求
Easter79 Easter79
2年前
SpringMVC第一天HelloWorld
1,普通Servlet的流程是通过配置<servlet</servlet和<servletmapping</servletmapping来拦截请求交给对应的Servlet来处理使用SpringMVC需要配置一个SpringMVC自带的Servlet,DispatcherServlet,使用他来拦截请求交给SpringMVC处理 we
Wesley13 Wesley13
2年前
.NET Core AutoWrapper 自定义响应输出
前言AutoWrapper是一个简单可自定义全局异常处理程序和ASP.NETCoreAPI响应的包装。他使用ASP.NETCoremiddleware拦截传入的HTTP请求,并将最后的结果使用统一的格式来自动包装起来.目的主要是让我们更多的关注业务特定的代码要求,并让包装器自动处理HTTP响应。这可以在构建API时加快开发时间,同时为HTT
Stella981 Stella981
2年前
Django中间件
一、Django中间件简介  官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。  但是由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。django中间件就类似于是dja
Stella981 Stella981
2年前
Http的会话token验证优化
这里只是优化思路的一个具体应用场景。在服务进程中收到一个http请求的时候会对客户端携带的token进行验证,一般token会有有效期的。这个一般可用于登录合法验证。一般流程会是这样:服务进程redis验证token等信息,再处理业务。如果服务进程数量上万个的话,那么单着一个验证token代价就会很庞大。几万个进程都会链接这个token集群进
Wesley13 Wesley13
2年前
ng6中,在HTTP拦截器里,异步请求数据,之后再返回拦截器继续执行用户请求的方法研究
一、问题背景:   上面绕口的标题不知道大家看不看的懂。通常我们用拦截器就是两个目的,1、在请求头里统一添加请求头。2、对响应结果预先处理。   我现在项目就是利用拦截器,在请求头里增加:'Authorization':this.storage.token的请求头。//最精简的一个拦截器。一会儿