如何用 puter.kv.set() 批量写入并用 disableSharing 标记私有条目?

发布时间:2026/9/12 14:17:07
如何用 puter.kv.set() 批量写入并用 disableSharing 标记私有条目? 如何用 puter.kv.set() 批量写入并用 disableSharing 标记私有条目【免费下载链接】puter The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puter如果你的应用需要一次向用户自己的 KV 存储写入多条数据配置、缓存、令牌等并且其中某些条目绝不应被其他应用看到Puter.js 的puter.kv.set()提供了批量写入形式和disableSharing选项来完成这件事。该接口适用于 websites、apps、nodejs 和 workers 平台见 set.md 的平台声明无需自建服务器每个应用在每个用户账号下拥有独立的 KV 存储数据读写由 Puter.js 处理。准备条件在页面或脚本中引入 Puter.js以下示例沿用文档中的引入方式script srchttps://js.puter.com/v2//script之后即可调用puter.kv.set()。文档示例统一使用puter.print()输出结果如果你的运行环境不是网页把输出换成自己的日志方式即可。批量写入的调用形式puter.kv.set()支持五种语法引自 set.mdputer.kv.set(key, value) puter.kv.set(key, value, expireAt) puter.kv.set({ key, value, expireAt }) puter.kv.set([ { key, value, expireAt }, ... ]) puter.kv.set({ items: [ { key, value, expireAt }, ... ] })批量形式中items是{ key, value, expireAt? }对象数组一次请求写入全部条目。两个数组形式等价直接传数组set([...])或包在对象里set({ items: [...] })。文档给出的批量写入示例可直接执行html body script srchttps://js.puter.com/v2//script script (async () { await puter.kv.set([ { key: name, value: Puter Smith }, { key: age, value: 21 }, ]); puter.print(Batch set complete); })(); /script /body /html约束条件单条和批量条目一致key为字符串最大1 KBvalue可以是 String、Number、Boolean、Object 或 Array对象和数组原样存取最大400 KBvalue 中的每个数字包括嵌套在对象/数组里的必须在±9,007,199,254,740,991Number.MAX_SAFE_INTEGER以内超出边界会被钳制到边界而不是拒绝NaN会存为null。需要精确保存超过该边界的 id 或总额时用字符串存可选参数expireAt是时间戳秒数表示该 key 何时过期。用 disableSharing 把整批条目标记为私有disableSharing是一个布尔选项通过尾随的 options 对象传入。单条写法puter.kv.set(key, value, { disableSharing: true })批量写法同样支持——尾随 options 作用于整批puter.kv.set([ { key: name, value: Puter Smith }, { key: age, value: 21 }, { key: accessToken, value: secret-value }, ], { disableSharing: true })完整可执行示例组合了文档中批量写入与私有写入两个示例写法均来自文档语法html body script srchttps://js.puter.com/v2//script script (async () { const success await puter.kv.set([ { key: name, value: Puter Smith }, { key: age, value: 21 }, { key: accessToken, value: secret-value }, ], { disableSharing: true }); puter.print(Batch set complete: ${success}); })(); /script /body /htmldisableSharing: true的效果引自 set.md 与 Using another apps data该条目被标记为仅你的应用可见。任何其他应用都不能读取、列出、修改或删除它——即使用户已经通过puter.perms.request(appData, …)把该应用的数据授权给了另一个应用对其它应用的具体表现读返回空列表不包含该条目写和删被拒绝且与用户授权了什么无关文档建议的典型用途缓存的 access token 等绝不应被其他应用看到的值——用户在授权提示里看不到你存储里有什么因此授权不等于暴露内容你自己的应用读写该条目不受影响对同一个 key不带该标志再次set会使其恢复可共享因为set替换的是整个条目。验证写入结果puter.kv.set()返回一个 Promise键值对创建成功或已有 key 的值更新成功时resolve 为true。这是文档给出的成功判定条件上面示例中success打印出的就是该值。写入后你的应用可以从自己的存储读回验证script (async () { // 用自己的应用身份读回私有条目对本应用正常可读 const name await puter.kv.get(name); const accessToken await puter.kv.get(accessToken); puter.print(name is: ${name}); puter.print(accessToken is: ${accessToken}); // 列出本应用的全部 key确认批量写入都已落库 const keys await puter.kv.list(); puter.print(Keys are: ${keys}); })(); /script其中puter.kv.get(key)返回该 key 的 valuekey 不存在时 resolve 为undefined见 get.mdputer.kv.list()返回当前应用在本用户存储中的全部 key按字典序排序无 key 时返回空数组见 list.md。至于其他应用读不到这一点文档描述的是行为保证而非需要你在单应用内验证的输出现象其他应用发起读请求会返回空、列表省略该条目、写删被拒。若要实际观察需要按 appData.md 的流程由第二个应用通过puter.perms.request(appData, { app, scopes })获取授权后再读——这在单应用环境里不构成验证步骤。限制与边界不能对别的应用的数据设置disableSharing后端在检测到disableSharing与跨应用写入appUuid同时出现时会抛出错误kv: \disableSharing cannot be set on another apps data实现见 KVStoreDriver.ts。该选项只作用于你自己应用的存储批量中每条 entry 独立携带expireAt而disableSharing是整批级别一批要么全部私有要么全部共享按尾随 options 是否传入判断想撤销私有状态时不带disableSharing重写该 key 即可但注意set是整体替换而非合并key/value 的大小上限、数字精度钳制行为见上文批量写入的调用形式一节单条和批量规则一致。下一步需要给条目设置过期时间时在单条或批量 item 中传expireAt时间戳秒数或使用 puter.kv.expire() / puter.kv.expireAt()完整的 KV 操作集合set、get、incr、decr、add、remove、update、del、expire、list、flush汇总在 Key-Value Store 文档。【免费下载链接】puter The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考