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

NextJS内置/api服务与自定义Express服务选型问题咨询

结论先行

你现阶段完全没必要单独搭自定义Express服务器,用NextJS内置的/api路由承载tRPC服务就够,所谓“内置API可扩展性差、架构不合理”是典型的认知误区。

先掰明白你对/api目录的误解

很多人觉得用内置API就是把所有服务端代码堆在api文件夹里,这完全是错的:

  • /api本质只是NextJS给你留的HTTP请求入口,和Express里的router入口没有任何区别。你完全可以自己在项目根目录建独立的server/文件夹,按业务模块拆分服务层、数据访问层、公共工具逻辑,/api下的文件只做最薄的一层:接请求、调你写好的业务逻辑、返回结果。架构分层想怎么做就怎么做,根本不存在代码堆成一团的问题。
  • 搭配tRPC用的时候更方便,你只需要在/api路径下放一个tRPC的动态入口文件就行,所有tRPC的路由定义、上下文逻辑、过程处理、业务代码全可以放在server/目录下按模块拆分,和你在Express里挂载tRPC中间件的开发体验、灵活度没有本质差别。NextJS官方给的tRPC最佳实践本身就是基于内置API路由做的,生态适配、部署兼容性都是最好的。

到底什么时候才需要单独搭自定义Express服务器?

只有碰到以下明确场景的时候,你再考虑换自定义服务也不迟:

  • 你需要让服务端逻辑脱离NextJS独立对外提供服务,比如要给独立部署的其他应用、第三方回调提供统一入口,不想把NextJS作为整个服务端的流量入口
  • 你有特殊的Node.js服务定制需求,比如要兼容某些和NextJS内置server不兼容的老旧中间件、要自定义HTTP/2服务配置、要做极细粒度的请求层性能调优——这类场景90%的开发者整个项目生命周期都碰不到
  • 你从项目第一天就确定要走纯前后端分离部署:前端NextJS单独部署做SSR/静态页面,后端服务完全独立迭代、独立扩缩容,这种情况你甚至没必要用Express,选更适配后端场景的Node.js框架效率更高。

关于你担心的“未来做大型项目、拆微服务”的问题

完全没必要为了这种不确定的未来需求提前过度设计:

  • 微服务拆分的核心是业务逻辑的解耦,和你一开始把入口放在NextJS的/api还是独立Express里没有半毛钱关系。只要你一开始做好代码分层,不把业务逻辑和框架入口强绑定,后续要拆微服务的时候,直接把对应业务模块的代码抽出去做成独立服务就行,tRPC本身也天然支持跨服务调用,迁移成本极低。
  • 你现在是入门阶段,上来就折腾自定义Express,反而要多处理一堆和业务无关的配置:tRPC和Express的适配、开发环境NextJS和Express的服务联动、部署配置改造,平白增加学习成本,反而分散你学NextJS和tRPC核心用法的精力。

给你现在阶段的实操参考

你现在要做身份认证+CRUD,直接按下面的目录结构搭就行,这个结构哪怕做到几十万行代码的单体项目都不会乱:

project-root/
├── pages/
│   ├── api/
│   │   └── trpc/[trpc].ts # 仅放tRPC请求入口的转发代码,不写业务逻辑
│   └── # 其他前端页面路由
├── server/
│   ├── trpc.ts # tRPC实例初始化、上下文定义、公共过程封装
│   ├── auth/ # 所有认证相关逻辑:session校验、登录注册、权限判断
│   └── modules/
│       └── # 按业务模块放CRUD逻辑、对应tRPC子路由,比如user、post这类
└── # 其他公共配置、组件文件

等你真的碰到内置API路由满足不了的需求,再迁移到自定义服务器也花不了半天时间,完全没必要提前为了没发生的场景增加复杂度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:54:16