Express使用教程(二)

创建新项目

bash 复制代码
# 创建项目目录
mkdir my-express-app
cd my-express-app
# 初始化npm项目
npm init -y
# 安装Express
npm intall express

使用Express生成器(可选)

bash 复制代码
# 全局安装Express生成器
npm install -q express-generator
# 创建项目
express --view=ejs my-app
cd my-app
npm install

创建Express应用

创建"Hello World"应用:

javascript 复制代码
# app.js
const express = require('express');
const app = express();
const port = 3000;
# 定义路由
app.get('/',(req, res) => {
    res.send("Hello World!");
});
# 启动服务器
app.listen(port, () => {
    console.log('服务器正在 http://localhost:${port}');
});

运行应用

bash 复制代码
node app.js

访问 http://localhost:3000,将看到"Hello World"消息

路由基础

路由决定了应用程序如何响应客户端对特定端点的请求。

http方法

javascript 复制代码
// get请求
app.get('/users', (req, res) => {
    res.send('获取用户列表');
});
// post请求
app.post('/users', (req, res) => {
    res.send('创建新用户');
});
// put请求
app.put('/users/:id', (req, res) => {
    res.send('更新用户 ${req.params.id}');
});
// delete请求
app.delete('/users/:id', (req, res) => {
    res.send('删除用户 ${req.params.id}');
});

路由参数

javascript 复制代码
// 路径参数
app.get('/users/:id', (req, res) => {
    res.send('用户ID: ${userId}');
});
// 多个参数
app.get('/users/:userId/posts/:postId', (req, res) => {
    const { userId, postId } = req.params;
    res.json({ userId, postId });
});
// 查询参数
app.get('/search', (req, res) => {
    const { q, page, limit } = req.query;
    res.json({ query: }q, page, limit );
});

路由模式匹配

javascript 复制代码
//通配符
app.get('/ab*cd', (req, res) => {
    res.send('匹配 abcd, abxcd, abRANDOMcd 等');
});
//可选参数
app.get('/products/:id?', (req, res) => {
    if (req.params.id){
        res.send('匹配 abcd, abxcd, abRANDOMcd 等');
    } else {
        res.send('所有产品');
    }
});

中间件

应用级中间件

javascript 复制代码
//全局中间件
app.use((req, res, next) => {
    console.log('${new Date().toISOString()} - ${req.mathod} ${req.url}');
    next();
});
//特定路径的中间件
app.use('/api', (req, res, next) => {
    console.log('API请求');
    next();
});

内置中间件

javascript 复制代码
//解析json请求体
app.use(express.json());
//解析url编码的请求体
app.use(express.urlencoded({ entended: true }));
//提供静态文件服务
app.use(express.static('public'));

第三方中间件

bash 复制代码
# 安装常用中间件
npm install morgan cors helmet compression
javascript 复制代码
const morgan = require('morgan');
const cors = require('cors');
const helmet = require('helmet');
const compression = require('compression');
// 日志中间件
app.use(morgan('combined'));
// 启用cores
app.use(cores());
// 安全中间件
app.use(helmet());
// 压缩响应
app.use(compression());

错误处理中间件

javascript 复制代码
// 错误处理中间件必须有四个参数
app.use((err, req, res, next) => {
    console.error(err,stack);
    res.status(500).json({
        error: '服务器内部错误',
        message: err.message
    });
});
相关推荐
FYKJ_201019 小时前
express绿叶横店短剧推荐与影评分享平台34219-计算机课程设计、毕业设计
java·javascript·vue.js·spring boot·后端·课程设计·express
vx_Biye_Design4 天前
springboot小区管理系统68491-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·课程设计·express
星光开发者4 天前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express
vx_Biye_Design4 天前
springboot高校选课系统82776-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·课程设计·express
vx_Biye_Design5 天前
springboot一站式旅游管理平台81037-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·课程设计·express·旅游
vx_Biye_Design5 天前
springboot宠物寄养服务预约与监管系统82684-计算机课程设计、毕业设计
java·vue.js·spring boot·elasticsearch·课程设计·express·宠物
vx_Biye_Design5 天前
expressDeepSeek社团咨询助手的学生社团管理系统60746-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·课程设计·express
vx_Biye_Design5 天前
springboot咖啡厅顾客点单管理系统12080-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·课程设计·express
vx_Biye_Design5 天前
springboot老年人用药智能管理系统38605-计算机课程设计、毕业设计
java·spring boot·后端·python·django·课程设计·express
vx_Biye_Design5 天前
springbootNBA数据分析系统平台42434-计算机课程设计、毕业设计
java·vue.js·spring boot·python·django·课程设计·express