You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Vercel KV在Node.js Express API中缓存MongoDB帖子

集成Vercel KV实现Express API缓存

步骤1:安装Vercel KV依赖

先安装官方KV客户端包:

npm install @vercel/kv

步骤2:初始化Vercel KV客户端

在项目中创建KV客户端实例(可单独写在kv.js文件,或直接在路由文件引入):

import { createClient } from '@vercel/kv';

const kv = createClient({
  url: process.env.KV_URL,
  token: process.env.KV_REST_API_TOKEN,
});

本地开发时,需在.env文件添加Vercel控制台提供的KV环境变量:

KV_URL=你的KV数据库URL
KV_REST_API_TOKEN=你的KV API令牌

步骤3:修改接口实现缓存逻辑

更新原/posts路由,优先从缓存取数据,未命中再查MongoDB并写入缓存:

router.get('/posts', async (req, res) => {
  try {
    const page = Number(req.query.page) || 1; 
    const limit = Number(req.query.limit) || 50;
    // 生成唯一缓存键,区分不同分页请求
    const cacheKey = `posts:page:${page}:limit:${limit}`;

    // 1. 尝试从Vercel KV获取缓存
    const cachedPosts = await kv.get(cacheKey);
    if (cachedPosts) {
      return res.json(JSON.parse(cachedPosts));
    }

    // 2. 缓存未命中,查询MongoDB
    const skip = (page - 1) * limit;
    const result = await User.aggregate([
      { $project: { posts: 1 } },
      { $unwind: '$posts' },
      { $project: { postImage: '$posts.post', date: '$posts.date' } },
      { $sort: { date: -1 } },
      { $skip: skip },
      { $limit: limit },
    ]);

    // 3. 将结果存入缓存,设置1小时过期(可按需调整)
    await kv.set(cacheKey, JSON.stringify(result), { ex: 3600 });

    res.json(result);
  } catch (err) {
    console.error(err);
    res.status(500).json({ message: 'Internal server error' });
  }
});

关键细节

  • 缓存键设计:用posts:page:X:limit:Y格式,避免不同分页请求的缓存互相覆盖。
  • 过期时间:通过ex: 3600设置缓存1小时后自动失效,防止数据长期过期。
  • 序列化处理:Vercel KV仅支持字符串存储,所以存数据时转JSON字符串,取数据时再解析。

内容的提问来源于stack exchange,提问作者cwecae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:33:24