前端缓存http请求

摘要:
divclass=“hello”>{console.log(data);cityid='+cityid).then((response)=>{returnresponse}).catch((respons)=<{returnresponse})。然后((data)=>{resolve(data)})})objPromise[cityId]=承诺;
需求:
1、 重复的请求,使用缓存
2、 不重复的请求,允许发送
3、 连续两次重复的发送,两次返回的结果是一样的,且第二次不发送请求
1、搭建前端服务 vue-cli 一步到位 
<template>
  <div class="hello">
    <button v-on:click="getrs(1)">
      北京
    </button>
     <button v-on:click="getrs(2)">
      上海
    </button>
  </div>
</template>
 
<script>
let objPromise = {};
 
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
  methods: {
    getrs(cityId) {
      this.getCity(cityId).then((data) => {
        console.log(data);
      })
    },
    getCity(cityId) {
        if(objPromise[cityId]) {
          /**
           * 连续第二次调用的话,如果结果还没有回来,返回上个相同请求的promise
           */
          return objPromise[cityId];
        }
        let promise = new Promise((resolve) => {
            this.axios.get('http://localhost:3000/?cityid='+cityId).then((response)=>{
                return response
            }).catch((response)=>{
                return response
            }).then(
                (data) => {
                    resolve(data)
                }
            )
        })
        objPromise[cityId] = promise;
        return promise;
    }
  }
}
</script>
 
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

2、搭建koa服务

const Koa = require('koa');
const app = new Koa();

app.use(async (ctx, next)=> {
  ctx.set('Access-Control-Allow-Origin', '*');
  ctx.set('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
  ctx.set('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
  if (ctx.method == 'OPTIONS') {
    ctx.body = 200; 
  } else {
    await next();
  }
});
app.use(async(ctx)=>{
    let url =ctx.url
    //从request中获取GET请求
    let request =ctx.request
    let req_query = request.query
    let req_querystring = request.querystring
    //从上下文中直接获取
    let ctx_query = ctx.query
    let ctx_querystring = ctx.querystring
    ctx.body={
        url,
    }
})
app.listen(3000,()=>{
    console.log('server is starting at port 3000');
})

免责声明:文章转载自《前端缓存http请求》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js求指定时间的周一和周日Unity4、Unity5移动平台多线程渲染在部分安卓手机上会造成闪退下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用 MVVMLight 绑定数据(转)

MVVMLight绑定数据示例 好了,我们在新建了两个项目,分别是“MVVMLight的主程序” 与  “Model层”,运行的效果及解决方案结构如下: 其实很简单,就是绑定了一个数据源而已,编写的代码也不多,下面我们来一步一步的实现使用MVVMLight来绑定数据,并了解其中的细节。 如何实现? 我这里使用的是.NET 4.5  , 你可以使用至少4....

(1)vue点击图片预览(可旋转、翻转、缩放、上下切换、键盘操作)

今天做项目的时候,遇到了新需求,需要把点击图片放大的功能。学习了一下GitHub上的viewerjs插件 GitHub地址:https://github.com/fengyuanchen/viewerjs  1、安装 npm install v-viewer --save-dev 2、在main.js中引入 import Vue from 'vue';...

利用Layer组件弹出多个对话框(非嵌套)与关闭及刷新

页面A中弹出页面B,在页面B中弹出页面C,在layer做嵌套ifframe弹出时会遇到C页面被嵌套在B页面中,如果C尺寸大于B,则C将不能显示完整。这个时候可以考虑B,C页面均由A页面弹出从而避免嵌套带来的问题。废话少说,直接上代码。 1.A弹出B: 在A.html中插入一下代码 layer.open({ title:'...

sqlserver 实现数据变动触发信息

1、建立存储过程,功能是动态写入文件中信息,可以在触发器或存储过程调用。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create proc [dbo].[SP_SendMagToFile] ( @path varchar(100), @fileName varchar(100), @ms...

C语言集锦(三)Direct3D和GDI+的例子

0.前言   有些时候你可能想了解,如何用纯C语言来写Direct3D和GDI+的Demo。注意,下面的Direct3D例子不适用于TCC编译器,GDI+的例子是可以的。 1.Direct3D C语言的例子   几乎所有的D3D例子都是用COM和C++写的。C语言可以用D3D吗,StackOverflow上给出了答案:directx-programming...

json编码格式化美化

有时候你想存储一个json到文件中,然后让别人调用或者读取或者作为临时存储,诸如此类。 但是php json_encode后数据是压缩的没有格式化,导致读起来有点费劲。 所以你可以这样(php 5.4以后)    代码如下: <?php $arr = array( 'status' => true, 'info' =&g...