问题描述
我有一个运行良好的JAMstack Web应用程序(使用RedwoodJS)。
但是,我的前端经常调用Google Maps API,这可能很昂贵。
所以我真的很想在Google Maps条款允许的时间内缓存API结果(即保存到服务器上的数据库)。
客户端缓存不足,因为不同的访问者仍然会因为获取其他访问者已经导致(并且本来可以存储)的结果而再次向我的API密钥收费。
我已经创建了一个数据库表和一个称为cachedQueries.ts的后端“服务”(使用prisma),它具有:
export async function getFromCacheOrFresh(key: string,getFresh: Function,expiresInSec: number): Promise<any> {
const NowMoment = dayjs.utc();
const NowStr = NowMoment.format(dbTimeFormatUtc);
const cached = await getCachedQuery({ key,expiresAtCutoff: NowStr });
console.log('getFromCacheOrFresh cached',cached);
if (cached) {
const cachedValueParsed = JSON.parse(cached.value);
console.log('cachedValueParsed',cachedValueParsed);
return cachedValueParsed;
} else {
const fresh = await getFresh();
savetoCache(key,JSON.stringify(fresh),expiresInSec);
return fresh;
}
}
我已经证明该cachedQueries.ts服务可以正常工作,并且可以正确地保存到数据库中并从数据库中检索出来,因为我已经成功地将其用于可从后端(而不是从前端)调用的第三方API -结束)。
现在,我面临的挑战是使其也能够缓存前端第三方API查询。
我的应用程序的结构是:
- 我有一个主页,可在其中创建一个空元素,并显示cell:
<div id="map"></div> <ScraperCell usaStateCountyCombo={getUsaStateCountyCombo(usaState,county)} />
- 单元格的成功函数调用
createMapAndAddMarkers
-
createMapAndAddMarkers
首先创建地图(具有特定的中心位置和缩放比例),然后遍历地址数组,并为每个地址调用getGeocodeFromCacheOrFresh
。 - 当前端调用
geocode
method时,如何实现getGeocodeFromCacheOrFresh
来利用后端“服务”中的getFromCacheOrFresh
函数?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)