这一章里,把 JS/TS 后端看成“市政大厅”。运行时像电力和地基,框架像窗口和流程,真正面对用户请求的是这整套接待系统。
#先分清运行时和框架
运行时 = 城市地基和电力系统
框架 = 市政大厅的办事流程运行时有:
- Node.js
- Deno
- Bun
框架有:
- Express
- Fastify
- NestJS
- Hono
- Koa
- AdonisJS
#Node.js —— 超大都会主城
import http from 'node:http';
http.createServer((req, res) => {
res.end('hello');
}).listen(3000);Node.js 的优势很简单:
- 最大兼容面
- 最大 npm 生态
- 最稳的默认盘
#Deno —— 安全默认的新城区
Deno.serve(() => new Response('hello'));Deno 更强调:
- TypeScript 原生
- Web Standards
- 权限模型
- 工具链内建
#Bun —— 新建高铁城
Bun.serve({
fetch() {
return new Response('hello');
},
});Bun 很适合:
- 追求极快本地反馈
- 想把运行时、包管理、测试、打包尽量收敛
#Express —— 老牌步行街
import express from 'express';
const app = express();
app.get('/', (_req, res) => res.send('hello'));
app.listen(3000);Express 的关键字是:
- 极简
- 中间件
- 灵活
但 2026 做新中大型项目时,它通常不再是首选默认值。
#Fastify —— 高效工业港
import Fastify from 'fastify';
const app = Fastify();
app.get('/', async () => ({ hello: 'world' }));
await app.listen({ port: 3000 });Fastify 很适合:
- API 服务
- 高吞吐
- 长期可维护的 Node 后端
#NestJS —— 省会行政中心
import { Controller, Get, Module } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
@Controller()
class AppController {
@Get()
hello() {
return 'hello';
}
}
@Module({ controllers: [AppController] })
class AppModule {}
const app = await NestFactory.create(AppModule);
await app.listen(3000);NestJS 的强项是:
- 模块化
- DI
- 大团队规范
- 企业项目组织能力
#Hono —— 国际机场中转城
import { Hono } from 'hono';
const app = new Hono();
app.get('/', (c) => c.text('hello'));
export default app;Hono 更像:
- Fetch API 风格
- 多运行时
- Edge/BFF 接口层
#Koa —— 手工匠人街区
import Koa from 'koa';
const app = new Koa();
app.use(async (ctx) => {
ctx.body = 'hello';
});
app.listen(3000);#AdonisJS —— 规划成熟的园区城市
import router from '@adonisjs/core/services/router';
router.get('/', () => 'hello');AdonisJS 的思路很明确:
- MVC
- IoC
- 目录约定
- 官方包齐
JS/TS 后端速查:
| 场景 | 默认优先看什么 |
|---|---|
| 通用 API | Node.js + Fastify |
| 大团队企业项目 | Node.js + NestJS |
| Edge / 多运行时 / BFF | Hono + Deno/Bun/Cloudflare |
| 全家桶业务系统 | Node.js + AdonisJS |
| 教学/极简原型 | Express |