一、前置环境准备1. 安装 Node.jsExpress 依赖 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 -y3. 安装 Expressnpm 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 → id123 app.get(/api/user/:id, (req, res) { // 获取动态参数 const userId req.params.id res.send({ userId: userId }) })3. 获取查询参数? 传参请求示例http://localhost:3000/api/search?keywordexpresspage1app.get(/api/search, (req, res) { // 获取 ? 后的参数 const { keyword, page } req.query res.send({ keyword, page }) })四、核心请求与响应对象1. req请求对象常用属性属性 / 方法作用req.params获取动态路由参数/user/:idreq.query获取查询参数?namexxxreq.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)五、核心中间件MiddlewareExpress 最大特色一切皆中间件本质是处理请求的函数。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.png3. 自定义中间件// 全局中间件所有请求都会经过 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 corsconst cors require(cors) app.use(cors()) // 允许所有跨域2. 日志工具morgannpm install morganconst morgan require(morgan) app.use(morgan(dev)) // 控制台打印请求日志3. 环境变量配置dotenv管理端口、数据库地址等敏感信息npm install dotenv创建.env文件PORT4000 NODE_ENVdevelopment使用require(dotenv).config() const PORT process.env.PORT || 3000七、路由模块化大型项目必备项目变大后所有路由写在app.js会混乱必须拆分路由。1. 创建路由文件新建routes/user.jsconst express require(express) // 创建路由实例 const router express.Router() // 编写用户相关路由 router.get(/, (req, res) { res.json({ msg: 用户列表 }) }) router.post(/add, (req, res) { res.json({ msg: 新增用户 }) }) // 导出路由 module.exports router2. 主文件引入路由app.js中// 引入路由 const userRouter require(./routes/user) // 注册路由添加统一前缀 /api/user app.use(/api/user, userRouter)最终访问路径http://localhost:3000/api/userhttp://localhost:3000/api/user/add八、连接数据库实战必备Express 本身无数据库常用搭配MySQL SequelizeORM 框架1. 安装依赖npm install mysql2 sequelize2. 数据库配置新建config/db.jsconst { 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 sequelize3. 定义模型表新建models/User.jsconst { 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 User4. 路由中使用数据库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