从微信小程序到鸿蒙JS开发-storage缓存&自动登录

开发
在应用开发时,我们常需要将一些数据缓存到本地,以提升用户体验。比如在一个电商的app中,如果希望用户登录成功后,下次打开app可以自动登录,就需要将用户信息存储到缓存中。

[[383405]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

在应用开发时,我们常需要将一些数据缓存到本地,以提升用户体验。比如在一个电商的app中,如果希望用户登录成功后,下次打开app可以自动登录,就需要将用户信息存储到缓存中。

鸿蒙JS开发模式提供了操作数据缓存的API,首先需导入storage模块。

  1. import storage from '@system.storage'

添加缓存的API为storage.set( ),指定key和value,在用户登录成功后将用户名和密码缓存到本地:

  1. // 登录 
  2.     login() { 
  3.         fetch.fetch({ 
  4.             url: this.url + "/user/login?phone=" + this.phone + "&pwd=" + this.pwd, 
  5.             responseType: "json"
  6.             success: res => { 
  7.                 let data = JSON.parse(res.data); 
  8.                 console.info(JSON.stringify(data)); 
  9.                 if (0 != data.code) { 
  10.                     prompt.showToast({ 
  11.                         message: data.msg, 
  12.                         duration: 3000 
  13.                     }) 
  14.                 } else { 
  15.                     let userInfo = data.data; 
  16.                     ...... 
  17.                     // 写入缓存 
  18.                     storage.set({ 
  19.                         key"userPhone"
  20.                         value: userInfo.mobile 
  21.                     }); 
  22.                     storage.set({ 
  23.                         key"userPwd"
  24.                         value: userInfo.password 
  25.                     }) 
  26.                 } 
  27.             } 
  28.         }) 
  29.     }, 

注意,鸿蒙JS的数据缓存API是以key:value进行存取的,value只能为string类型。如存储其他类型,并不会失败而进入fail回调,但在使用get( )的时候会无法取到对应value的。

在进入app时,便可调用storage.get( )取出缓存中的用户信息,通过给定key,在success回调中会返回对应的value。取到用户信息后并调用登录方法实现自动登录功能。

  1. onShow() { 
  2.       // 从其他页面跳转回来,清除页面栈 
  3.       router.clear(); 
  4.       // 从缓存取用户信息,自动登录 
  5.       storage.get({ 
  6.           key"userPhone"
  7.           success: data => { 
  8.               if (data) { 
  9.                   this.phone = data; 
  10.                   storage.get({ 
  11.                       key"userPwd"
  12.                       success: data => { 
  13.                           if (data) { 
  14.                               this.pwd = data; 
  15.                               this.login(); 
  16.                           } 
  17.                       } 
  18.                   }) 
  19.               } 
  20.           } 
  21.       }) 
  22.       // 查询购物车数量 
  23.       if (this.userInfo && this.userInfo.id) { 
  24.           this.countCarts(); 
  25.       } 
  26.   }, 

效果如下:

删除缓存中数据的API为storage.delete( ),指定key即可删除对应数据。此方法在IDE中无提示(猜测是和delete关键词重复了),但经实验是可以正常使用的。

在用户退出登录后,应清除缓存中的用户信息。对应方法如下:

  1. // 退出登录 
  2.   exitLogin() { 
  3.       prompt.showDialog({ 
  4.           title: "提示"
  5.           message: "确认退出登录吗?"
  6.           buttons: [ 
  7.               { 
  8.                   text: "确定"
  9.                   color: "#E20A0B" 
  10.               }, 
  11.               { 
  12.                   text: "取消"
  13.                   color: "#666666" 
  14.               } 
  15.           ], 
  16.           success: res => { 
  17.               if (res.index == 0) { 
  18.                   ...... 
  19.                   // 删除缓存中用户信息 
  20.                   storage.delete({ 
  21.                       key"userPhone" 
  22.                   }); 
  23.                   storage.delete({ 
  24.                       key"userPwd" 
  25.                   }); 
  26.                   this.userInfo = null
  27.               } 
  28.           } 
  29.       }) 
  30.   } 

退出登录过后再次进入app,就不会自动登录了:

此外还有storage.clear( )方法用于清空所有的数据缓存。

微信小程序提供了类似的操作数据缓存的方法,分为同步方法和异步方法,且数据的value可为任何能够通过JSON.stringify序列化的对象。因此在从微信小程序切换到鸿蒙JS开发时,在数据缓存这里踩了坑。鸿蒙storage的value只能为string,但其提供了文件存储,拥有更强大的数据存储能力。

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2021-03-02 09:29:29

鸿蒙HarmonyOS应用开发

2021-02-23 09:52:42

鸿蒙HarmonyOS应用开发

2021-02-23 12:25:26

鸿蒙HarmonyOS应用开发

2021-02-20 09:52:02

鸿蒙HarmonyOS应用开发

2021-02-23 12:23:57

鸿蒙HarmonyOS应用开发

2021-02-21 11:09:18

鸿蒙HarmonyOS应用开发

2021-02-22 14:56:55

鸿蒙HarmonyOS应用开发

2021-02-04 13:49:41

鸿蒙HarmonyOS应用开发

2021-02-05 09:46:16

鸿蒙HarmonyOSjs开发

2021-02-25 15:13:08

鸿蒙HarmonyOS应用开发

2021-02-24 09:36:03

鸿蒙CSS应用开发

2021-02-07 09:17:24

鸿蒙HarmonyOS应用开发

2017-05-08 15:03:07

微信小程序开发实战

2016-09-27 16:38:24

JavaScript微信Web

2016-11-04 10:49:48

微信小程序

2016-09-28 18:10:59

微信程序MINA

2016-09-27 20:36:23

微信HttpWeb

2016-11-04 10:30:17

微信小程序

2021-03-04 11:50:48

微信Spring Secu登录

2023-07-28 22:14:51

Spring多租户配置
点赞
收藏

51CTO技术栈公众号