如何在 API 路由和 getServerSideProps 之间共享数据?

How to share data between API route and getServerSideProps?

假设需要从外部 API 获取非客户端特定数据 x。为了减少加载时间,我想获取 x 一次,将其缓存并仅在以下情况下再次获取:

  1. 客户请求需要 x
  2. x 的缓存数据早于 ttl 秒。

我如何才能通过 API 路由和 getServerSideProps 访问 x 的缓存数据?

我的方法

x 作为静态 class 属性

我用静态方法 getX 创建了一个 class Provider,它将

这不起作用,因为 getServerSideProps 中的 Provider.x 和 API 路由中的 Provider.x 不指向内存中的同一个对象。我想这是由于他们 运行 在个体工人中造成的。

正在将 x 保存到文件

类似于第一种方法,除了将 x 保存到本地文件而不是静态文件 属性。这确实有效,但速度很慢,因为它必须在硬盘上而不是在内存中读写。

您可以使用 Node.js global 对象在 API 路由和 getServerSideProps 之间共享数据。

例如,您可以在 getServerSideProps 函数中设置数据。

export const getServerSideProps = async () => {
    // Set data in `global` object
    global._SOME_DATA_ = { data: { hello: 'world' }, ttl: '3600' }
    // ...
}

然后在 API 路线的稍后位置检索相同的数据。

export default async (req, res) => {
    console.log(global._SOME_DATA_) // Logs: `{ data: { hello: 'world' }, ttl: '3600' }`
    // ...
}