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

代码哈士奇
• 阅读 1428

想要在使用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时做类似于拦截器和请求结果再处理(类似于请求和响应拦截)

点赞
收藏
评论区
推荐文章
皮卡皮卡皮 皮卡皮卡皮
1年前
「uniapp」封装请求拦截和响应拦截
uniapp官方的请求方式首先我们先看一下uni官方给开发者提供的uni.request用来网络请求的apiuni.request( url: '', method: 'GET', data: , header:, success: res , fail: () , complete: () );可以看到我们每次请求数据的时候都需要按照这个格式来请求,
Wesley13 Wesley13
11个月前
JAVA拦截器,JAVA返回结果跨域问题解决
遇到的问题: ------ 通过拦截器做权限控制,没有权限时返回了json值,结果前端请求时提示跨域了 备注:我的前端站点和后端站点不是一个地址 **报错1:** Access to XMLHttpRequest at 'http://localhost:8089/appcicd/appinfo/getappinfos' from origi
Stella981 Stella981
11个月前
Node
node.js应用程序由如下三部分组成 1>导入所需模块:使用require指令来加载node.js模块 2>创建服务器:服务器可以监听客户端请求,类似于apache、nginx等 3>接收请求与响应请求:接收客户端/浏览器发送过来的请求,将处理得到的数据返回 如下是第一个例子 //步骤1:导入所需模块 //这里我们使用re
Stella981 Stella981
11个月前
Cookie,Session学习(java servlet编程)
**Cookie** 问题:HTTP 协议是没有记忆功能的,一次请求结束后,相关数据会被销毁。如果第二次的请求需要使用相同的请求数据怎么办呢?难道是让用户再次请求书写吗? 为了解决这个问题,引入了Cookie技术; Cookie技术其实就是浏览器端实现的数据临时存储技术,保存一些必要的数据,当访问某些网页需要这些数据时,浏览器自动将数据加到HTTP请求
Easter79 Easter79
11个月前
SpringMVC第一天HelloWorld
1,普通Servlet的流程是通过配置<servlet></servlet>和<servlet-mapping></servlet-mapping>来拦截请求交给对应的Servlet来处理 使用SpringMVC需要配置一个SpringMVC自带的Servlet,**DispatcherServlet,**使用他来拦截请求交给SpringMVC处理  we
Wesley13 Wesley13
11个月前
.NET Core AutoWrapper 自定义响应输出
前言 -- AutoWrapper是一个简单可自定义全局异常处理程序和ASP.NET Core API响应的包装。他使用ASP.NET Core middleware拦截传入的HTTP请求,并将最后的结果使用统一的格式来自动包装起来.目的主要是让我们更多的关注业务特定的代码要求,并让包装器自动处理HTTP响应。这可以在构建API时加快开发时间,同时为HTT
Stella981 Stella981
11个月前
Spring mvc之拦截器介绍
一、拦截器介绍  ============ (1)拦截器概念介绍 ----------         拦截器(Interceptor)是Spring的核心功能之一,它可以在用户请求Action的之前或之后进行一些业务处理。         很多从ASP.NET转过来的开发人员把它叫做过滤器。 (2)拦截器方法执行顺序 ------------
Stella981 Stella981
11个月前
Http的会话token验证优化
这里只是优化思路的一个具体应用场景。 在服务进程中 收到一个http请求的时候 会对客户端携带的token进行验证,一般token会有有效期的。这个一般可用于登录合法验证。 一般流程会是这样:服务进程redis验证token等信息,再处理业务。 如果服务进程数量上万个的话,那么单着一个验证token代价就会很庞大。几万个进程都会链接这个token集群进
Wesley13 Wesley13
11个月前
ng6中,在HTTP拦截器里,异步请求数据,之后再返回拦截器继续执行用户请求的方法研究
一、问题背景: =======       上面绕口的标题不知道大家看不看的懂。通常我们用拦截器就是两个目的, 1、在请求头里统一添加请求头。 2、对响应结果预先处理。       我现在项目就是利用拦截器,在请求头里增加:'Authorization': this.storage.token 的请求头。 // 最精简的一个拦截器 。一会儿
Wesley13 Wesley13
11个月前
.net core MVC 通过 Filters 过滤器拦截请求及响应内容
**前提:**   需要nuget   Microsoft.Extensions.Logging.Log4Net.AspNetCore   2.2.6;         Swashbuckle.AspNetCore 我暂时用的是  4.01; **描述:**通过 Filters 拦截器获取 Api 请求内容及响应内容,并记录到日志文件;      有