是不是很多新手用 Node.js 写接口时都头疼?“用原生 http 模块写路由,代码堆得像乱麻”“处理个 POST 请求还要手动解析数据,动不动就报错”“想加个简单的日志功能,查半天文档也没头绪”?别慌,这些麻烦事用 Express 框架分分钟就能搞定。作为 Node.js 最常用的 Web 框架,Express 就像给你配了个 “接口开发助手”,路由、数据解析、中间件这些功能现成能用,不用自己从零写代码。今天兔子哥就带大家入门 Express,从安装到接口开发实战,零基础也能跟着做,一起往下看吧!
先说说:Express 到底是啥?为啥老鸟都爱用它?
很多新手刚接触时,总把 Express 想得很复杂,其实它就是个简化版的 “服务器开发工具箱”。Node.js 自带的 http 模块虽然能搭服务器,但写接口时要处理一堆细节,比如路由判断、请求解析,代码又长又容易乱。而 Express 把这些常用功能打包成了简单的 API,调用几行代码就能实现复杂功能。
看看老鸟怎么说
做后端开发的老王分享:“以前用 http 模块写接口,一个简单的用户查询要写几十行路由判断代码,改用 Express 后,几行路由配置就搞定,效率直接翻倍。” 这可不是夸张,Express 的核心优势就是 “简单、高效、灵活”,尤其适合零基础新手入门。
用表格对比下,你就知道差距了
| 功能需求 | 原生 http 模块做法 | Express 做法 | 代码量对比 |
|---|---|---|---|
| 处理路由 | 用 if-else 判断 req.url 和 req.method | 直接 app.get ('/path', (req,res)=>{}) | 多→少 |
| 解析 POST 数据 | 手动监听 data 事件拼接数据,还要转格式 | 一行 app.use (express.json ()) 搞定 | 复杂→简单 |
| 加日志功能 | 自己写函数记录请求时间、路径 | 直接用 morgan 中间件,一行代码引入 | 麻烦→省心 |
简单说,Express 帮你把重复劳动都做了,你只管专注业务逻辑,不用纠结底层细节。这也是为啥 90% 的 Node.js 接口项目都在用它。
入门第一步:Express 怎么装?基础用法超简单
学 Express 不用急着啃源码,先把安装和基础用法搞懂,5 分钟就能启动第一个服务。
安装 Express,就两步
- 新建项目文件夹(比如 “express-demo”),打开命令提示符进入文件夹
- 输入
npm init -y初始化项目,再输入npm install express,等安装完成就行
安装时要是提示 “npm ERR”,大概率是网络问题,试试切换手机热点,或者加个镜像源(比如
npm install express --registry=https://registry.npm.taobao.org),新手别慌,这种小问题很常见。写第一个 Express 服务,代码少到惊讶
新建 “app.js” 文件,输入这些代码:
javascript
// 引入Expressconst express = require('express');// 创建app实例const app = express();// 定义端口(别用3000?可能被占用,试试3001)const port = 3001;// 写个简单路由:访问根路径返回欢迎语app.get('/', (req, res) => {res.send('Hello Express!零基础也能学会~');});// 启动服务app.listen(port, () => {console.log(`服务启动啦!访问:http://localhost:${port}`);});命令提示符输入
node app.js,打开浏览器访问http://localhost:3001,看到欢迎语就说明成功了!是不是比用 http 模块简单多了?核心功能:这 3 个 Express 用法,接口开发天天用
Express 的功能虽然多,但新手先掌握这 3 个核心用法,足够应付大部分接口开发需求。
1. 路由:接口地址怎么定义?
路由就是 “接口地址 + 请求方法” 的组合,告诉服务器 “哪个地址用哪种方法处理请求”。比如:
javascript
// GET请求:查询用户列表app.get('/api/users', (req, res) => {res.send([{ id: 1, name: '张三' }, { id: 2, name: '李四' }]);});// GET请求:根据ID查询单个用户app.get('/api/users/:id', (req, res) => {// req.params里能拿到URL中的参数const userId = req.params.id;res.send({ id: userId, name: `用户${userId}` });});// POST请求:添加新用户app.post('/api/users', (req, res) => {// req.body里是客户端传的JSON数据(前提是加了express.json()中间件)const newUser = req.body;res.send({ message: '添加成功', user: newUser });});注意哦,路由定义顺序很重要!如果把
/api/users/:id写在/api/users前面,访问/api/users会被当成id=users处理,新手很容易踩这个坑。2. 中间件:功能扩展就靠它
中间件就是 “在请求到达路由前执行的函数”,能做日志记录、权限验证、数据解析这些事。Express 自带了很多实用中间件,比如:
javascript
// 解析JSON格式的请求体(POST数据靠它)app.use(express.json());// 解析表单提交的URL编码数据app.use(express.urlencoded({ extended: true }));// 自定义日志中间件:记录请求时间和路径app.use((req, res, next) => {console.log(`[${new Date().toLocaleString()}] ${req.method} ${req.url}`);next(); // 必须调用next(),否则请求会卡住});中间件要写在路由前面,不然不会生效。老王就犯过这错:“把解析 JSON 的中间件写在路由后面,结果 POST 请求一直拿不到数据,查了半天才发现顺序错了。”
3. 响应方法:给客户端返回数据
Express 给 res 对象加了很多方便的响应方法,不用自己拼状态码和头信息:
res.send():返回任意类型数据(自动设 Content-Type)res.json():返回 JSON 数据(比 send 更明确)res.status(404).send('没找到'):返回指定状态码res.redirect('/'):重定向到其他地址
比如查询用户没找到时,就可以这样返回:
javascript
app.get('/api/users/:id', (req, res) => {const user = users.find(u => u.id == req.params.id);if (!user) {res.status(404).json({ error: '用户没找到' });return;}res.json(user);});实战案例:用 Express 开发用户接口,完整流程走一遍
光说不练假把式,咱们开发一套用户 CRUD 接口(创建、查询、更新、删除),看看 Express 怎么在实际项目中用。
步骤 1:准备模拟数据和基础配置
javascript
const express = require('express');const app = express();app.use(express.json()); // 解析JSON请求体// 模拟用户数据let users = [{ id: 1, name: '张三', age: 20 },{ id: 2, name: '李四', age: 22 }];步骤 2:写 CRUD 接口
javascript
// 1. 查询所有用户(GET)app.get('/api/users', (req, res) => {res.json(users);});// 2. 根据ID查询用户(GET)app.get('/api/users/:id', (req, res) => {const user = users.find(u => u.id === parseInt(req.params.id));if (!user) return res.status(404).json({ error: '用户不存在' });res.json(user);});// 3. 添加用户(POST)app.post('/api/users', (req, res) => {if (!req.body.name) { // 简单验证return res.status(400).json({ error: '姓名不能为空' });}const newUser = {id: users.length + 1,name: req.body.name,age: req.body.age || 18 // 年龄默认18};users.push(newUser);res.status(201).json(newUser); // 201表示创建成功});// 4. 更新用户(PUT)app.put('/api/users/:id', (req, res) => {const user = users.find(u => u.id === parseInt(req.params.id));if (!user) return res.status(404).json({ error: '用户不存在' });user.name = req.body.name || user.name;user.age = req.body.age || user.age;res.json(user);});// 5. 删除用户(DELETE)app.delete('/api/users/:id', (req, res) => {const userIndex = users.findIndex(u => u.id === parseInt(req.params.id));if (userIndex === -1) return res.status(404).json({ error: '用户不存在' });users.splice(userIndex, 1);res.json({ message: '删除成功' });});步骤 3:测试接口,看看效果
启动服务后,用 Postman 工具测试:
- GET 访问
/api/users→ 看所有用户 - POST 到
/api/users,请求体{"name":"王五","age":25}→ 添加用户 - PUT 到
/api/users/3,请求体{"age":26}→ 更新年龄 - DELETE 访问
/api/users/3→ 删除用户
每步操作后都能看到对应的响应,是不是很顺畅?新手刚开始可以多试几次,熟悉每种请求的用法。
避坑指南:新手用 Express 常踩的 5 个坑,这样解决
1. POST 请求拿不到 req.body
十有八九是没加
app.use(express.json())中间件,这个中间件能解析 JSON 格式的请求体,不加的话 req.body 就是 undefined。记住,写接口前先加这行代码,不然数据全白传。2. 路由顺序错了,导致接口不生效
比如先定义了
/api/users/:id,再定义/api/users/add,访问/api/users/add会被当成id=add处理。解决方法:把具体路由写在动态路由前面,比如先写/api/users/add,再写/api/users/:id。3. 启动服务提示 “端口已被占用”
这是因为 3000、8080 这些常用端口被其他程序用了。解决方法:换个端口,比如把
app.listen(3000)改成app.listen(3001),改完重启服务就行,新手别慌,换端口是家常便饭。4. 中间件没调用 next (),请求卡住
自定义中间件时,一定要在最后调用
next(),告诉 Express“这个中间件处理完了,继续往下走”。比如:javascript
// 错误写法:没调用next()app.use((req, res, next) => {console.log('日志记录');// 少了next(),请求到这就停了});// 正确写法app.use((req, res, next) => {console.log('日志记录');next(); // 必须加!});5. 忘记处理 404 和错误请求
用户访问不存在的路由时,Express 默认返回 “Cannot GET /xxx”,体验不好。可以在所有路由后面加个 404 处理:
javascript
// 404处理app.use((req, res) => {res.status(404).json({ error: '接口不存在哦~' });});自问自答:新手学 Express 常见问题
问:Express 必须和 EJS、MongoDB 一起用吗?
答:不用!Express 是个独立框架,能和任何模板引擎(EJS、Pug)或数据库(MySQL、MongoDB)搭配,甚至不用模板引擎和数据库,只写接口也行。新手先专注 Express 本身,其他工具以后慢慢学。
问:中间件太多记不住怎么办?
答:不用死记!常用的就几个:
express.json()(解析 JSON)、express.urlencoded()(解析表单)、morgan(日志)、cors(跨域)。用到时查文档,用多了自然就记住了。问:学完基础后,怎么提升 Express 技能?
答:可以学这些进阶内容:
- 用
express.Router()拆分路由,让代码更清晰 - 学用中间件做权限验证(比如 JWT)
- 集成数据库(比如用 Mongoose 操作 MongoDB)
- 学错误处理中间件,统一处理接口错误
个人心得:Express 不难,多写接口就会了
兔子哥刚开始学 Express 时,连路由和中间件的区别都搞不清,写个简单的 POST 接口还总忘加解析中间件。但逼着自己写了 5 个接口项目后,突然就开窍了 —— 原来 Express 的核心就是 “路由 + 中间件”,把这俩玩明白,大部分需求都能搞定。
老王说得好:“别光看教程不动手,哪怕照着抄代码,也要亲手运行、改参数、看效果。接口报错了别慌,对着错误信息搜一搜,解决一个问题就多一分经验。”
希望这篇教程能帮你入门 Express,现在就动手写个简单的用户接口吧!从查询、添加用户开始,慢慢加功能,你会发现 Express 真的能让接口开发变简单。技术学习没有捷径,多练多试,你很快就能熟练掌握,加油!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
评论列表
Express轻松入门,实战精通接口开发。