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

Express快速上手

一、前置环境准备

1. 安装 Node.js

Express 依赖 Node.js,先安装:

  • 官网:https://nodejs.org/
  • 推荐版本:LTS 长期稳定版
  • 验证安装:
node -v # 查看 Node 版本 npm -v # 查看 npm 版本

2. 初始化项目

创建项目文件夹并初始化:

# 1. 创建文件夹并进入 mkdir express-demo && cd express-demo # 2. 初始化 package.json(一路回车即可) npm init -y

3. 安装 Express

npm install express

二、快速入门:第一个 Express 服务

1. 最简服务器代码

创建app.js(项目入口文件):

// 1. 引入 express const express = require('express') // 2. 创建应用实例 const app = express() // 3. 定义端口 const PORT = 3000 // 4. 编写接口/路由 // 根路由 GET 请求 app.get('/', (req, res) => { res.send('Hello Express! 我的第一个服务') }) // 5. 启动服务 app.listen(PORT, () => { console.log(`服务已启动:http://localhost:${PORT}`) })

2. 启动服务

node app.js

打开浏览器访问:http://localhost:3000,即可看到返回内容。


三、核心基础:路由与请求方法

路由是请求方法 + 请求路径 + 处理函数,是 Express 最核心功能。

1. 常用 HTTP 请求方法

// GET:获取数据(查询) app.get('/api/user', (req, res) => { res.send({ name: '张三', age: 20 }) }) // POST:新增数据(提交) app.post('/api/user', (req, res) => { res.send({ msg: '新增用户成功' }) }) // PUT:更新数据(全量更新) app.put('/api/user/:id', (req, res) => { res.send({ msg: '更新用户成功' }) }) // DELETE:删除数据 app.delete('/api/user/:id', (req, res) => { res.send({ msg: '删除用户成功' }) })

2. 动态路由(带参数)

// /api/user/123 → id=123 app.get('/api/user/:id', (req, res) => { // 获取动态参数 const userId = req.params.id res.send({ userId: userId }) })

3. 获取查询参数(? 传参)

请求示例:http://localhost:3000/api/search?keyword=express&page=1

app.get('/api/search', (req, res) => { // 获取 ? 后的参数 const { keyword, page } = req.query res.send({ keyword, page }) })

四、核心:请求与响应对象

1. req(请求对象)常用属性

属性 / 方法作用
req.params获取动态路由参数/user/:id
req.query获取查询参数?name=xxx
req.body获取 POST/PUT 请求体数据(需配置中间件)
req.method获取请求方法(GET/POST 等)
req.url获取请求路径

2. res(响应对象)常用方法

// 1. 发送文本/HTML res.send('文本内容') // 2. 发送 JSON 数据(最常用) res.json({ code: 200, msg: '成功', data: [] }) // 3. 设置响应状态码 res.status(404).json({ msg: '资源不存在' }) // 4. 重定向 res.redirect('https://www.baidu.com')

五、核心:中间件(Middleware)

Express 最大特色:一切皆中间件,本质是处理请求的函数。

1. 中间件作用

  • 解析请求体
  • 处理跨域
  • 日志记录
  • 权限验证
  • 错误捕获

2. 内置中间件(无需额外安装)

const express = require('express') const app = express() // 1. 解析 JSON 格式请求体(POST 提交 JSON 数据) app.use(express.json()) // 2. 解析表单格式请求体 app.use(express.urlencoded({ extended: true })) // 3. 托管静态资源(图片、CSS、HTML 等) app.use(express.static('public'))

静态资源使用:创建public文件夹,放入logo.png,访问http://localhost:3000/logo.png

3. 自定义中间件

// 全局中间件:所有请求都会经过 app.use((req, res, next) => { console.log(`请求方法:${req.method},请求路径:${req.url}`) next() // 必须调用 next() 放行到下一个中间件/路由 }) // 局部中间件:仅作用于指定路由 const checkToken = (req, res, next) => { const token = req.headers.token if (!token) return res.status(401).json({ msg: '未登录' }) next() } // 使用局部中间件 app.get('/api/admin', checkToken, (req, res) => { res.json({ msg: '管理员页面' }) })

六、常用第三方中间件

1. 处理跨域(cors)

前后端分离必备,解决浏览器跨域限制:

npm install cors
const cors = require('cors') app.use(cors()) // 允许所有跨域

2. 日志工具(morgan)

npm install morgan
const morgan = require('morgan') app.use(morgan('dev')) // 控制台打印请求日志

3. 环境变量配置(dotenv)

管理端口、数据库地址等敏感信息:

npm install dotenv
  1. 创建.env文件:
PORT=4000 NODE_ENV=development
  1. 使用:
require('dotenv').config() const PORT = process.env.PORT || 3000

七、路由模块化(大型项目必备)

项目变大后,所有路由写在app.js会混乱,必须拆分路由。

1. 创建路由文件

新建routes/user.js

const express = require('express') // 创建路由实例 const router = express.Router() // 编写用户相关路由 router.get('/', (req, res) => { res.json({ msg: '用户列表' }) }) router.post('/add', (req, res) => { res.json({ msg: '新增用户' }) }) // 导出路由 module.exports = router

2. 主文件引入路由

app.js中:

// 引入路由 const userRouter = require('./routes/user') // 注册路由,添加统一前缀 /api/user app.use('/api/user', userRouter)

最终访问路径:

  • http://localhost:3000/api/user
  • http://localhost:3000/api/user/add

八、连接数据库(实战必备)

Express 本身无数据库,常用搭配:MySQL + Sequelize(ORM 框架)

1. 安装依赖

npm install mysql2 sequelize

2. 数据库配置

新建config/db.js

const { Sequelize } = require('sequelize') // 连接数据库 const sequelize = new Sequelize('数据库名', '账号', '密码', { host: 'localhost', dialect: 'mysql' }) // 测试连接 async function testConnect() { try { await sequelize.authenticate() console.log('数据库连接成功') } catch (error) { console.log('数据库连接失败', error) } } testConnect() module.exports = sequelize

3. 定义模型(表)

新建models/User.js

const { DataTypes } = require('sequelize') const sequelize = require('../config/db') // 定义用户表模型 const User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, age: DataTypes.INTEGER }) // 同步表到数据库 User.sync() module.exports = User

4. 路由中使用数据库

const User = require('../models/User') // 查询所有用户 router.get('/', async (req, res) => { const users = await User.findAll() res.json({ data: users }) }) // 新增用户 router.post('/add', async (req, res) => { const { name, age } = req.body const user = await User.create({ name, age }) res.json({ msg: '新增成功', data: user }) })

九、错误处理中间件

统一捕获所有错误,避免服务崩溃:

// 错误处理中间件(必须放在所有路由最后) app.use((err, req, res, next) => { console.error(err.stack) res.status(500).json({ code: 500, msg: '服务器异常', error: err.message }) })

十、开发效率工具:nodemon

修改代码后自动重启服务,无需手动执行node app.js

# 全局安装 npm install -g nodemon # 启动服务(替代 node app.js) nodemon app.js
http://www.jsqmd.com/news/825210/

相关文章:

  • Wonder3D:如何用AI将任意图片快速变成3D模型?完整教程指南
  • BarrageGPT:基于大语言模型的实时弹幕智能总结系统开发实战
  • 终极Vue 3日期时间选择器:如何构建企业级日期处理解决方案
  • 基于知识图谱的工程化技能文档管理:从元数据到静态站点生成
  • Sora 2提示词工程×TikTok算法偏好深度对齐,92.6%完播率提升背后的3层数据验证模型
  • **降本增效两不误:精细化运维助力业务持续增长**
  • 智慧农业之无人机航拍棉花出苗率识别数据集 农作物田间杂草识别图像数据集 无人机农作物小目标识别数据集 detr算法第10240期
  • Corpus-OS:像管理代码一样管理语料,构建可复现的数据流水线
  • GPT5.5长文档处理API最佳实践
  • 流式编码:从数据序列化到高吞吐实时处理的核心技术
  • CSS Transforms 变换完全指南
  • AI Agent工厂化开发:从模块化架构到生产环境部署实战
  • 基于RISC-V与电子墨水屏的桌面日历时钟:从硬件选型到低功耗实践
  • AR/VR眼动追踪硬件仿真:NeRF与混合建模的创新应用
  • 如何将CURSOR从 Agents Window(代理窗口) Editor Window(编辑器窗口)切换到
  • 软考架构师90天冲刺|DAY14·质量属性-可测试性
  • 从P-N结到太阳能供电系统:硬件工程师的实践指南
  • 2026年当前,徐州门窗装修如何避坑?这家14年本土品牌值得考虑 - 2026年企业推荐榜
  • RBPF-SLAM室内移动机器人关键技术【附代码】
  • Banana Pi BPI-Leaf-S3开发板评测:低功耗物联网硬件设计与实战
  • 机器人技术入门:从感知-思考-行动原理到Arduino避障小车实践
  • 前端鼠标动画库实战:粒子拖尾、磁性吸附与波纹扩散效果实现
  • 2026年第二季度重庆食堂托管服务商综合实力盘点与推荐 - 2026年企业推荐榜
  • 【One-KVM】开源轻量级 IP-KVM 解决方案,无网远控免费平替 — BIOS 级远程控制
  • 视频里的字幕和文案怎么批量提取?从ASR到内容复用的工具拆解
  • Google用Gemini重新发明鼠标光标,AI人机交互迎来新变革!
  • 基于Java的养老服务平台代码讲解文档
  • 带电作业机器人安全遥操作系统【附代码】
  • 嵌入式开发利器:nanoclaw极简命令行解析器设计与实战
  • 嵌入式图形交互应用开发:基于状态机与Displayio的桌面宠物猫实现