smmcat-localstorage:本地化存储

在HTML5中,新加入了一个localStorage 特性,这个特性主要是用来作为本地存储 来使用的,解决了cookie存储空间不足的问题 (cookie中每条cookie的存储空间为4k),localStorage 中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage 会有所不同。该函数仅支持存储字符串,因此若需要存储对象格式需要搭配 JSON.stringify() 转换格式使用

为此,给 koishi 存储数据提供了一种基础的可选方案。使用类似 HTML5 的存储方式去存数据

插件提供两个方法:

  • ctx.localStorage.getItem(key) // 取数据 (字符串)
  • ctx.localStorage.setItem(key,str) // 存数据 (字符串)

如要存储对象,请搭配使用 JSON.stringify()JSON.parse() ,就不画蛇添足了


插件配置项

使用演示

使用 key 去查找对应的数据,如无数据返回的是空字符。并在存储区域创建对应缓存文件
因此,请遵守文件名规范去给 key 值命名

// ...
import { } from 'koishi-plugin-smmcat-localstorage'
//...
export const inject = ['localstorage']

export function apply(ctx: Context, config: Config) {

  ctx
    .command('存数据 <str>')
    .action(async ({ session }, str) => {

      await ctx.localstorage.setItem('myData', str)
      await session.send('存储成功')
    })

  ctx
    .command('取数据')
    .action(async ({ session }) => {
      
      const result = await ctx.localstorage.getItem('myData')
      await session.send('数据为:\n' + result)
    })
}

效果

命名空间

类似的,如果需要不同业务,可使用 / 的方式去分割业务作为 key

例如:

  • property/name
  • user/name

两个 name 都在不同的区域中是独立的;原理是创建时在不同的文件夹中