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

能否在Next.js的middleware.js中使用getStaticProps?

结论:不可行,getStaticProps没法在middleware里用

getStaticProps是Next.js页面组件特有的数据获取方法,只能在页面/组件文件里运行,和middleware完全是两个独立的执行环境——middleware运行在边缘网络层,请求进来就触发,根本碰不到页面的getStaticProps逻辑,所以没法用它来控制middleware里API的调用频率。

可行的替代方案

  • 利用边缘缓存控制API调用
    在middleware里调用重定向API时,给请求加上Cache-Control头,设置一天的缓存时间:

    // middleware.js
    export async function middleware(request) {
      const res = await fetch('你的重定向API地址', {
        headers: {
          'Cache-Control': 'max-age=86400, s-maxage=86400' // 缓存1天
        }
      });
      const redirectList = await res.json();
      // 匹配路由并执行重定向逻辑
    }
    

    这样边缘节点会缓存API的响应,一天内只会调用一次API,后续请求直接用缓存的列表。

  • 预生成静态重定向文件+ISR更新
    用一个专门的页面或者脚本,在构建时通过getStaticProps拉取重定向列表,生成一个public/redirects.json文件。middleware直接读取这个静态文件:

    // middleware.js
    import redirectList from './public/redirects.json';
    
    export function middleware(request) {
      // 匹配路由并执行重定向逻辑
    }
    

    如果需要每天更新,给生成这个文件的页面加上revalidate: 86400,Next.js会每天重新生成这个文件,middleware就能拿到最新的重定向列表。

  • 用边缘KV存储缓存列表
    把重定向列表存到边缘KV服务,设置过期时间为一天。middleware直接从KV读取数据,只有当缓存过期时才重新调用API更新KV里的内容,这样也能实现每天只调用一次API的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:16:55