点餐 开发一个覆盖 Web、小程序、多平台外卖订单、App 的“全渠道点菜系统”,技术选型要同时满足:
- 多端代码可复用(降低人月成本)
- 性能与体验可接受(尤其 C 端小程序/APP)
- 团队招人/维护成本可控
- 能无缝接入外卖开放平台(美团、京东、饿了么、抖音)
- 后期可横向扩展(门店数、并发、营销玩法、BI)
把主流方案放在一张表先对比:
| 维度 | Node.js (Nest/Egg) + TS | Java (Spring Cloud) | Go (Kratos/Go-Zero) | .NET 8 (ASP.NET Core) | Python (FastAPI) |
|---|---|---|---|---|---|
| 人力池 | 大 | 最大 | 中等 | 少(国内) | 中大 |
| 外卖 SDK | 官方只给 Java,Node 需自签 | 官方完整 | 需自签 | 需自签 | 需自签 |
| 开发效率 | 高 | 中 | 中高 | 高 | 最高 |
| 并发/延迟 | 中高 | 高 | 最高 | 高 | 中 |
| 微服务生态 | 完善 | 最完善 | 完善 | 完善 | 一般 |
| 多云 K8s 支持 | 好 | 最好 | 最好 | 好 | 一般 |
| 代码共享(前后端) | TS 可共享类型 | 无 | 无 | 无 | 无 |
结论一句话:
“业务团队 < 20 人、想最快上线、后期逐步演进” → Node.js + TypeScript 全栈;
“业务团队 > 20 人、并发/稳定/外卖官方 SDK 优先” → Java + Spring Cloud 为主,Node 做 BFF 辅助。
下面给出两套可直接落地的“技术栈清单”,按场景自取。
一、轻量级方案:Node.js + TypeScript 全栈(“小步快跑”)
-
后端(所有管理端 + 开放接口)
- 主框架:NestJS(自带 IoC、GraphQL、微服务、Socket、队列封装)
- 数据库:PostgreSQL 主库 + Redis 缓存/队列 + MongoDB(可选,存日志/菜品草稿)
- 外卖对接:
– 美团/饿了么/京东/抖音 官方只有 Java SDK,用 Node 自己写“签名 + 解密”工具(各平台 1 天能撸完),封装成 @takeaway/maituan-sdk 这类私有库。 - 订单归集:建一张 out_order 表,字段统一(平台、平台单号、门店、状态、json 扩展),写完sdk 后直接写表并发 MQ。
- 实时推单:Socket.io 或 NestJS 自带的 ws,给 Web 管理端、App 管理端做“来单提醒”。
- 任务调度:BullMQ(Redis) 做“自动接单/取消/打印小票”。
- 部署:Docker + GitLab CI + 腾讯云 TKE(或阿里云 ACK),自动滚动发布。
-
Web 管理端(老板/店长后台)
- React + Ant Design Pro + TypeScript(与后端共用类型定义,src/shared 目录 link 进去)。
- 权限:NestJS 端用 passport + jwt,前端 route 权限颗粒度到“按钮”。
- 打印:调用浏览器原生 ESC/POS,或使用“云打印”代理(易联云、飞鹅)—— 他们提供 JS/TS 包。
-
Web 顾客点单(H5 / 扫码)
- 同一套 React 项目,多配一个 mobile 入口,用 vant-react 组件库;PWA 离线缓存。
- 支付:微信 H5、支付宝 H5;微信里自动走 JSAPI。
-
微信小程序
- Taro 3 + React + TypeScript(与上面 H5 业务逻辑 90% 复用)。
- 支付:微信官方 JSAPI。
- 订阅消息:下单/出餐/完成 3 个模板,后台 NestJS 直接发。
-
App(顾客端 + 骑手端)
- React-Native 0.72 + Expo Modules + TypeScript;
- 业务代码继续复用 Taro 的 ducks 目录(Redux Toolkit);
- 推送:Expo Push / 极光;
- 支付:微信/支付宝原生 SDK,用 expo-custom-native-module 桥接。
-
代码复用率
- 类型定义:前后端共用 ⇒ 0 歧义。
- 工具函数:价格格式化、门店距离、购物车计算,全放 shared。
- 同构:Taro 写一套页面 → 微信小程 + H5 + React-Native 三端;只有导航条/支付/地图需写平台差分。
-
成本 & 时间
- 3 个后端 + 3 个前端(含小程序+RN)可 3 个月出 MVP(单门店)。
- 外卖对接 1 人 2 周可完成 4 平台。
- 后续横向加门店,只需加数据库分片 + 容器副本。
二、企业级方案:Java + Spring Cloud + Node BFF(“稳 + 高并发”)
-
后端核心
- Spring Boot 3 / Spring Cloud Alibaba
- Nacos 注册配置、Sentinel 流控、Seata 分布式事务
- MyBatis-Plus + ShardingSphere 分库分表(按门店/订单)
- 消息:RocketMQ(阿里云的 ONS)
- 链路:SkyWalking
- 外卖对接:直接用官方 Java SDK,加统一适配层 takeaway-adapter,输出标准 OrderDTO。
-
BFF(Backend-for-Frontend)
- 用 Node.js + NestJS 仅做“聚合/裁剪/兜底缓存”,供 H5/小程序/App 调用;
- 好处:前端仍然 TS 全栈,无需等后端排期;
- 高并发场景下,BFF 可水平扩,Java 专心做事务。
-
Web 管理端
- React + Ant Design Pro;
- 调用 BFF,BFF 再调 Java 微服务。
-
小程序 / App / 外卖逻辑
- 与方案一相同,Taro + React-Native 复用;
- 只是接口域名换成 BFF。
-
部署
- Java 服务容器化(JDK 17 + Alpine)K8s;
- BFF 同样容器;
- 网关:Spring Cloud Gateway 或 Higress;
- 灰度:Argo Rollouts。
三、如何二选一?
-
团队现状
- 如果核心骨干只会 JS/TS,且 6 个月内要上线,选方案一;
- 如果已有 Java 老兵、并发要求 > 1w qps、需要完整 Seata 事务,选方案二。
-
外卖对接紧迫度
- 美团/饿了么审核很严,官方 Java SDK 能省 1~2 周,Java 方案占优;
- 但 Node 自签也不复杂,只是 HMAC/MD5+AES,开源社区有现成例子。
-
后续玩法
- 营销、会员、BI、数据大屏,都会不断改需求;TS 全栈改得快;
- 若需要多租户、分账、财务对账,Spring Cloud 的分布式事务更稳。
四、小结(给老板一句话版)
“先验证市场” → Node.js + TS 一把梭,3 个月上线,外卖平台全接;
“要抗 10w+ 订单、财务合规、多人协作” → Java 微服务做主,Node 只当 BFF,让前端继续 TS 飞起。