当前位置: 首页 > news >正文

Node系列 · Express:基本使用

Node系列 · Express:基本使用

Express 是 Node 生态最老牌、最流行的 Web 框架——Koa 是同一作者(TJ)后续更轻量的作品,Fastify / NestJS 是更新的高性能替代。本章从零起步搭建一个 Express 服务,理解它的核心约定。

一、Express 与同类框架对比

框架风格性能生态何时选
Express中间件链式回调一般最大老项目 / 通用
Koa2async/await 中间件略好中等现代项目
Fastify插件式最快增长中性能敏感
NestJS装饰器 + DI一般企业级 / 团队

Express 不一定是"最好"的,但学习曲线最低、文档最全、第三方中间件最多——新项目入门首选。

二、安装与最小服务

mkdirmy-app&&cdmy-appnpminit-ynpminstallexpress
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello World'); }); app.listen(3000, () => { console.log('服务运行在 http://localhost:3000'); });
$nodeapp.js 服务运行在 http://localhost:3000

三、官方资源

资源地址
英文官网expressjs.com
中文官网expressjs.com.cn
GitHubexpressjs/express

四、REST 风格路由

Express 推荐按 RESTful 风格设计路由——HTTP 方法 + URL 表达"对资源的操作":

方法路径含义
GET/users用户列表
GET/users/:id单个用户详情
POST/users创建用户
PUT/users/:id整体更新用户
PATCH/users/:id部分更新用户
DELETE/users/:id删除用户
app.get('/users', listUsers); app.get('/users/:id', getUser); app.post('/users', createUser); app.put('/users/:id', updateUser); app.patch('/users/:id', partialUpdateUser); app.delete('/users/:id', deleteUser);

五、与原生 http 模块的关系

Express 是http模块的封装,底层完全一样:

Express app.get ...

Express 框架

http.createServer

net.Socket

TCP/IP

每一段app.get(path, handler)内部:

  1. 注册到 Express 的路由表
  2. http 服务收到请求后匹配 path
  3. 匹配到时调用 handler
  4. handler 里通过res.send()/res.json()返回响应

Express 的价值不是性能,而是抽象掉 HTTP 协议解析——让你专注业务逻辑。

六、第一个完整服务

const express = require('express'); const app = express(); // JSON body 解析(Content-Type: application/json) app.use(express.json()); // 模拟数据库 const users = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, ]; // 路由 app.get('/api/users', (req, res) => { res.json({ users }); }); app.get('/api/users/:id', (req, res) => { const user = users.find((u) => u.id === Number(req.params.id)); if (!user) { return res.status(404).json({ error: 'User not found' }); } res.json(user); }); app.post('/api/users', (req, res) => { const newUser = { id: users.length + 1, ...req.body }; users.push(newUser); res.status(201).json(newUser); }); app.listen(3000, () => { console.log('http://localhost:3000'); });

测试:

$curlhttp://localhost:3000/api/users{"users":[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]}$curl-XPOST-H"Content-Type: application/json"\-d'{"name":"Carol"}'http://localhost:3000/api/users{"id":3,"name":"Carol"}

七、最佳实践

场景推荐
项目起步npm init+npm install express
路由设计REST 风格(GET / POST / PUT / DELETE)
JSON 接口app.use(express.json())解析请求体
文件上传multer中间件
跨域cors中间件(详见 跨域 CORS)
路由拆分express.Router()(详见 路由)
自动重启nodemon(见 nodemon 章节)

八、小结

  • Express 是 Node 老牌 Web 框架;最小服务 5 行代码
  • 推荐 REST 风格:HTTP 方法 + URL 表达资源操作
  • Express 是http模块的封装,底层完全一致
  • 项目结构:app.js入口 + 路由模块 + 中间件
  • 中文文档:expressjs.com.cn
http://www.cnnetsun.cn/news/4291940.html

相关文章:

  • 物理仿真击剑对抗:盲评大模型推理能力的新方法
  • 松下轨道车辆用镍氢电池系统解析:技术选型背后的安全与寿命逻辑
  • 从React到Elm:重新理解前端状态管理与类型安全
  • 拓扑排序与动态规划:解决DAG路径计数问题的核心算法
  • STM32U375 Standby模式进不去?低功耗排查指南与解决步骤
  • C++模板编程:从泛型基础到可变参数模板实战指南
  • 基于微信小程序的心理咨询预约系统(毕业设计项目源码+文档)
  • Python正则表达式re模块全解析:从匹配到替换的完整工具箱
  • 等保合规服务商怎么选?网宇商检一站式交付检查表
  • 腾讯客户端开发面试复盘:从基础到架构的全面考察与应对策略
  • LSTM+Transformer混合建模实战:时序预测的协同架构与工程落地
  • XSLT 服务器端:从原理到实战
  • 千问本地部署全攻略:与文心一言的路径选择
  • MATLAB绘图进阶:从基础函数到专业可视化技巧
  • AI辅助开发工作流:从省时到团队产能提升的工程实践
  • 英伟达数据中心营收92.5%背后的GPU选型与部署实践
  • 建筑物实例分割数据集 | 建筑物分割 实例分割 遥感解译 城市规划 YOLO格式9021期
  • 基于协同过滤算法的校园食堂点餐平台系统(源码+lw+部署文档+讲解等)
  • 每日算法精讲 Day 3(双指针基础) | 移动零 复写零 与 LeetCode 202. 快乐数 与 LeetCode 11.盛最多水的容器 与 LeetCode 611 有效三角形的个数
  • AI短剧到AI观众:内容生产流水线的工程化拆解
  • ChatGPT商务高级席位:团队升级、迁移与Codex CLI配置实践
  • 《易学・恒䷟|道影子新解 032》
  • 工业AI落地难点解析:垂直场景高适配需求下,多模型聚合架构的制造业应用实践
  • 大模型不止写代码:非编码工作流接入LLM实战指南
  • GUI半透明渲染中的ALPHA通道:直通与预乘模式解析
  • 车载Qi V1.3无线充电器STSAFE-V110认证方案全解析
  • 把 GitHub 项目写进简历:HR 和技术面试官看的根本不是同一件事
  • TokenSpend:AI模型调用成本归因与ROI核算方案
  • 【12-kubenetes的持久化存储】
  • 知识蒸馏原理与PyTorch实战:避开过度蒸馏的陷阱