gpt4 book ai didi

google-apps-script - Google App 脚本用户缓存服务 : Accessing Cache Information in a Different Script but Same User

转载 作者:行者123 更新时间:2023-12-05 03:22:12 26 4
gpt4 key购买 nike

研究一种通过 Google App Scripts 的缓存服务从一个网络应用程序共享数据到另一个网络应用程序的方法。

用户加载第一个网页并填写他们的信息。一旦提交,一个函数将在此数据上运行并通过缓存存储。

CacheService.getUserCache().put('FirstName','David')
CacheService.getUserCache().put('Surname','Armstrong')

控制台日志显示这两个元素已保存到缓存的报告。

但是在第二个 web 应用程序中,当在控制台日志上调用缓存时返回 null

var cache = CacheService.getUserCache().get('Firstname');
var cache2 = CacheService.getUserCache().get('Surname');

console.log(cache)
console.log(cache2)

有什么想法吗?

最佳答案

一个可能的解决方案是实现一项服务来同步网络应用之间的缓存。

这可以通过创建一个 WebApp 来实现,该 WebApp 允许通过 POST 添加到 ScriptCache “缓存同步器”的 UserCache个人网络应用程序。

操作会很简单:

  • 从我们想要同步的网络应用程序,我们检查我们是否有用户的缓存。

    • 如果它存在,我们将它发送到服务器以便它存储它。
    • 如果不存在,我们检查服务器是否存储了用户的缓存。

这是它如何工作的草图。

缓存同步.gs
const cacheService = CacheService.getScriptCache()
const CACHE_SAVED_RES = ContentService
.createTextOutput(JSON.stringify({ "msg": "Cache saved" }))
.setMimeType(ContentService.MimeType.JSON)

const doPost = (e) => {
const { user, cache } = JSON.parse(e.postData.contents)
const localCache = cacheService.get(user)
if (!localCache) {
/* If no local data, we save it */
cacheService.put(user, JSON.stringify(cache))
return CACHE_SAVED_RES
} else {
/* If data we send it */
return ContentService
.createTextOutput(JSON.stringify(localCache))
.setMimeType(ContentService.MimeType.JSON)
}
}
ExampleWebApp.gs
const SYNC_SERVICE = "<SYNC_SERVICE_URL>"
const CACHE_TO_SYNC = ["firstName", "lastName"]
const cacheService = CacheService.getUserCache()

const syncCache = () => {
const cache = cacheService.getAll(CACHE_TO_SYNC)
const options = {
method: "POST",
payload: JSON.stringify({
user: Session.getUser().getEmail(),
cache
})
}
if (Object.keys(cache).length === 0) {
/* If no cache try to fetch it from the cache service */
const res = UrlFetchApp.fetch(SYNC_SERVICE, options)
const parsedResponse = JSON.parse(JSON.parse(res.toString()))
Object.keys(parsedResponse).forEach((k)=>{
console.log(k, parsedResponse[k])
cacheService.put(k, parsedResponse[k])
})
} else {
/* If cache send it to the sync service */
const res = UrlFetchApp.fetch(SYNC_SERVICE, options)
console.log(res.toString())
}
}

const createCache = () => {
cacheService.put('firstName', "Super")
cacheService.put('lastName', "Seagull")
}

const clearCache = () => {
cacheService.removeAll(CACHE_TO_SYNC)
}

附加信息

  • 必须使用 任何人 访问权限部署同步服务。您可以通过 API_KEY 控制访问权限。
  • 这只是一个例子,并没有完全发挥作用,您应该根据自己的需要进行调整。
  • Web 应用程序的syncCache 功能是可重用的,是您应该在所有 Web 应用程序中使用的功能。
  • 检索缓存时有一个缺点,因为您必须提供必要的 key ,这迫使您手动编写它们(例如 CACHE_TO_SYNC)。
  • 可以考虑替换ScriptCacheScriptProperties .
文档

关于google-apps-script - Google App 脚本用户缓存服务 : Accessing Cache Information in a Different Script but Same User,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72785235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com