news 2026/5/16 1:31:03

Express快速上手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 1:30:06

AWorks嵌入式驱动开发实战:从模型解析到GPIO/UART驱动编写

1. 项目概述:从“裸机”到“框架”的驱动开发范式转变在嵌入式开发领域,设备驱动程序的编写一直是连接硬件与上层应用的关键桥梁。过去,我们习惯于为每一款微控制器(MCU)或每一个外设模块,从头开始编写寄存…

作者头像 李华
网站建设 2026/5/16 1:30:05

Java-RPG-Maker-MV-Decrypter:3分钟掌握RPG游戏资源解密完整方案

Java-RPG-Maker-MV-Decrypter:3分钟掌握RPG游戏资源解密完整方案 【免费下载链接】Java-RPG-Maker-MV-Decrypter You can decrypt whole RPG-Maker MV Directories with this Program, it also has a GUI. 项目地址: https://gitcode.com/gh_mirrors/ja/Java-RPG-…

作者头像 李华
网站建设 2026/5/16 1:27:05

鸿蒙 ArkUI 开发:实现页面间的相互跳转

在鸿蒙应用开发中,页面跳转是实现多页面交互的基础。本文将基于 ArkTS(ArkUI 的 TypeScript 扩展)一、创建项目步骤步骤 1:创建项目与文件结构步骤 2:配置路由文件 main_pages.json提前添加配置代码:注意&a…

作者头像 李华
网站建设 2026/5/16 1:26:03

《时光尽头的烟火》的传播入口:时间感如何形成搜索理由

从内容传播角度看,《时光尽头的烟火》有很强的画面入口:时间走到远处,烟火只亮一瞬,读者会先记住这个视觉感,再进入歌曲情绪。这类标题不能只写成伤感回忆。更准确的角度,是把烟火理解为时间深处的一次短暂…

作者头像 李华
网站建设 2026/5/16 1:25:05

终极Vue 3日期时间选择器:如何构建企业级日期处理解决方案

终极Vue 3日期时间选择器:如何构建企业级日期处理解决方案 【免费下载链接】vue3-date-time-picker Datepicker component for Vue 3 项目地址: https://gitcode.com/gh_mirrors/vu/vue3-date-time-picker Vue3-DateTime-Picker是一个基于Vue 3 Composition …

作者头像 李华
网站建设 2026/5/16 1:25:04

ChatGPT镜像服务器一键部署:构建稳定AI网关的完整指南

1. 项目概述与核心价值最近在折腾AI应用部署的朋友,估计都听说过或者用过“镜像服务”这个词。简单来说,就是把一些原本访问受限或者速度不理想的API服务,通过一个中间服务器“转接”一下,让它变得稳定、快速、易于管理。今天要聊…

作者头像 李华