Next.js向内部API提交表单及getStaticProps调用API路由相关疑问
核心前提说明
官方这条限制仅针对getStaticProps这一个特定方法的使用场景,不是对API路由的全局限制,搞清楚这点你提到的两个疑问就都能理顺。
关于POST/PUT请求的处理逻辑
getStaticProps的运行时机是构建阶段、或ISR增量静态再生的后台服务端阶段,此时没有任何用户交互行为发生,根本不存在接收、处理POST/PUT这类需要用户主动触发的请求的场景。
你提到的POST/PUT请求,全部都是用户在浏览器端访问页面后,通过点击、提交表单等操作触发的客户端侧请求,这类请求直接调用API路由即可,完全符合官方的设计规范。官方从来没有说过GET请求不能走API路由,只是不建议在getStaticProps里多此一举用fetch调用内部API而已。
API路由的设计意义
API路由是Next.js提供的全栈能力补充,核心适用场景完全和getStaticProps的预渲染场景不冲突:
- 处理所有客户端侧发起的请求:包括GET拉取动态个性化数据、POST提交表单、PUT修改内容、DELETE删除数据等所有用户交互触发的请求
- 处理需要隐藏敏感凭证的后端逻辑:比如对接第三方需要秘钥的服务、校验用户登录态等,逻辑写在API路由里不会泄露到前端
- 对外提供通用接口能力:可以给同站点的其他服务、移动端应用、第三方合作方提供标准HTTP接口
你补充提到的构建阶段API未启动的问题确实是原因之一,但核心原因是性能浪费:getStaticProps本身就运行在Next.js的服务端进程中,调用同进程的逻辑还要走HTTP发起fetch请求,平白多了网络开销,直接复用API路由里的公共逻辑代码是性价比更高的方案。
内容的提问来源于stack exchange,提问作者Matthijn
相关产品推荐
相关产品推荐

