React、Next.js、Node.js、Express 经常一起出现,但它们解决的问题不同。
Node.js
Node.js 是 JavaScript 的运行时,让 JavaScript 可以运行在服务器端。
它适合:
- 写后端服务
- 写脚本
- 构建工具
- CLI 工具
Express
Express 是 Node.js 中常见的 Web 框架,用来写 API。
import express from "express";
const app = express();
app.use(express.json());
app.get("/api/users/:id", (req, res) => {
res.json({ id: req.params.id });
});Express 的 Request 类型通常有多个泛型槽位,用来描述 params、response body、request body、query 等。
React
React 是 UI 库,负责组件和状态。
function App() {
return <h1>Hello</h1>;
}React 本身不负责后端,也不规定路由和部署方式。
Next.js
Next.js 是 React 框架,提供:
- 文件路由
- Layout
- Server Component
- Client Component
- 静态生成
- 服务端渲染
- Route Handler
Next.js API
App Router 中可以写 Route Handler。
export async function GET() {
return Response.json({ ok: true });
}RESTful 用户接口可以拆成:
/api/users
/api/users/[id]前端调用后端
const response = await fetch("/api/users/1");
const user = await response.json();如果是跨域后端,需要处理 CORS、认证 token、错误状态码和 loading 状态。
关系总结
- Node.js:运行 JavaScript 的服务器环境
- Express:Node.js 后端框架
- React:前端 UI 库
- Next.js:React 全栈框架
延伸理解
复习这篇时,不要只记住名词,要把重点放在 Node.js 运行时、Express API、React UI、Next.js 路由和前后端调用链。这类知识如果只停留在定义层面,很容易在面试或项目中答得很散。更好的理解方式是把它放进一个具体场景:谁在调用它,输入从哪里来,失败后谁负责恢复,数据或状态会不会被重复处理。
- 后端设计的重点不是把接口跑通,而是让认证、校验、错误处理、幂等性、日志和版本演进都有明确位置。
- 接口字段要服务于业务语义,不能只是数据库表结构的直接暴露。
- 评审一个 API 时,至少检查正常路径、权限失败、输入非法、资源不存在和外部依赖失败。
在真实项目中,可以把它当成一个判断框架:先确认输入、约束、失败场景和可观测性,再决定具体工具或写法。 如果一个方案看起来很简单,要继续追问它在规模扩大、权限变化、异常恢复和团队协作下是否仍然成立。
实践检查清单
- 明确这个知识点在系统中的位置:是开发时约束、运行时能力、基础设施能力,还是协作流程。
- 写出一个最小可运行例子,并补一个失败例子;只会写 happy path 说明理解还不够稳。
- 记录常见误用:例如边界条件、权限假设、性能假设、同步/异步差异或环境差异。
- 把概念和项目经历关联起来:如果面试被追问,可以用自己的项目说明为什么这样选。
- 最后用一句话总结取舍:它牺牲了什么,换来了什么。
自测问题
- 这个主题解决的核心问题是什么?
- 如果不用当前方案,还有哪些替代方案?代价是什么?
- 最容易出错的边界条件在哪里?
- 如何在代码、测试或监控中验证它真的可靠?
项目化应用场景
可以把这类知识放到一个用户系统或内容管理系统里理解:前端提交表单,后端先做认证,再做权限检查和输入校验,然后执行业务逻辑,最后返回稳定的状态码和错误结构。一个成熟后端接口不应该只考虑成功返回数据,还要考虑 token 过期、用户无权限、重复提交、参数非法、数据库写入失败和外部服务超时。接口文档、日志、监控和测试用例都应该围绕这些路径展开。
常见误区:
- 把认证和鉴权混为一谈。
- 只在前端校验输入,后端直接相信请求。
- 所有错误都返回 500,导致调用方无法恢复。