柳嘉希

硕士研究生毕业生

软件工程师 | 可扩展的API · 网络爬虫 · 数据集成 · Vibe代码清理专家

Node.js、Express、React、Next.js 的关系:从前端 UI 到后端 API

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 说明理解还不够稳。
  • 记录常见误用:例如边界条件、权限假设、性能假设、同步/异步差异或环境差异。
  • 把概念和项目经历关联起来:如果面试被追问,可以用自己的项目说明为什么这样选。
  • 最后用一句话总结取舍:它牺牲了什么,换来了什么。

自测问题

  1. 这个主题解决的核心问题是什么?
  2. 如果不用当前方案,还有哪些替代方案?代价是什么?
  3. 最容易出错的边界条件在哪里?
  4. 如何在代码、测试或监控中验证它真的可靠?

项目化应用场景

可以把这类知识放到一个用户系统或内容管理系统里理解:前端提交表单,后端先做认证,再做权限检查和输入校验,然后执行业务逻辑,最后返回稳定的状态码和错误结构。一个成熟后端接口不应该只考虑成功返回数据,还要考虑 token 过期、用户无权限、重复提交、参数非法、数据库写入失败和外部服务超时。接口文档、日志、监控和测试用例都应该围绕这些路径展开。

常见误区:

  • 把认证和鉴权混为一谈。
  • 只在前端校验输入,后端直接相信请求。
  • 所有错误都返回 500,导致调用方无法恢复。