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

通过Next.js路由处理API请求:跨请求方法共享变量问题

Next.js API路由跨请求方法共享变量的解决方案

你的代码存在核心问题:Next.js的API路由是无状态的,每次请求都会重新执行handler函数。POST请求里定义的hi只属于当前POST请求的上下文,当新的GET请求过来时,handler重新执行,hi未被定义,会直接抛出ReferenceError。

要在不同请求(同一用户或全局范围)之间共享数据,需根据业务场景选择合适方案:

1. 同一用户跨请求共享(会话级)

如果是同一用户的POST和GET请求共享数据,用会话存储是最合理的方案。以iron-session为例:

首先安装依赖:

npm install iron-session

修改API路由代码:

import { withIronSessionApiRoute } from 'iron-session/next'

const sessionOptions = {
  password: process.env.SECRET_COOKIE_PASSWORD, // 需设置至少32位字符的环境变量
  cookieName: 'myapp_session',
  cookieOptions: {
    secure: process.env.NODE_ENV === 'production',
  },
}

async function handler(req, res) {
  if (req.method === 'POST') {
    // 将数据存入会话
    req.session.hi = req.body
    await req.session.save()
    res.status(200).json({ message: '数据已保存' })
  }
  if (req.method === 'GET') {
    // 从会话取出数据
    const hi = req.session.hi
    console.log(hi)
    res.status(200).json({ data: hi })
  }
}

export default withIronSessionApiRoute(handler, sessionOptions)

2. 全局所有请求共享(应用级)

如果需要所有请求访问同一份临时数据,可使用内存缓存,但注意:服务器重启、横向扩容多实例时,内存数据会丢失,仅适合存储非关键临时数据。

示例代码:

// 在handler外部定义全局变量
let globalHi = null

export default function handler(req, res) {
  if (req.method === 'POST') {
    globalHi = req.body
    res.status(200).json({ message: '全局数据已更新' })
  }
  if (req.method === 'GET') {
    console.log(globalHi)
    res.status(200).json({ data: globalHi })
  }
}

3. 持久化共享(可靠存储)

如果数据需要持久化,或要应对服务器重启、多实例场景,使用数据库或Redis这类外部存储:

以Redis为例(先安装ioredis依赖):

import Redis from 'ioredis'

const redis = new Redis(process.env.REDIS_URL)

export default async function handler(req, res) {
  if (req.method === 'POST') {
    await redis.set('hi_key', JSON.stringify(req.body))
    res.status(200).json({ message: '数据已存入Redis' })
  }
  if (req.method === 'GET') {
    const hi = JSON.parse(await redis.get('hi_key'))
    console.log(hi)
    res.status(200).json({ data: hi })
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:01:54