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

Express使用教程(二)

创建新项目

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

使用Express生成器(可选)

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

创建Express应用

创建“Hello World”应用:

# 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}');
});

运行应用

node app.js

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

路由基础

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

http方法

// 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}');
});

路由参数

// 路径参数
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 );
});

路由模式匹配

//通配符
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('所有产品');}
});

中间件

应用级中间件

//全局中间件
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();
});

内置中间件

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

第三方中间件

# 安装常用中间件
npm install morgan cors helmet compression
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());

错误处理中间件

// 错误处理中间件必须有四个参数
app.use((err, req, res, next) => {console.error(err,stack);res.status(500).json({error: '服务器内部错误',message: err.message});
});

http://www.dtcms.com/a/398807.html

相关文章:

  • 大模型部署基础设施搭建 - Docker
  • 芜湖建设机械网站企业管理系统软件下载
  • 永嘉县住房和城乡规划建设局网站自助贸易网
  • 华为云学习笔记(1):ECS 实例操作与密钥登录实践
  • 有一次django开发实录
  • RISC-V 中的 Wait For Interrupt 指令 (wfi) 详解
  • 前端核心框架vue之(指令案例篇1/5)
  • 企业静态网站源码增城建设局网站
  • 网站兼容9公司logo和商标一样吗
  • 题解:AT_abc206_e [ABC206E] Divide Both
  • 链改2.0总架构师何超秘书长重构“可信资产lPO与数链金融RWA”
  • 网站开发技术包括网站建设专业培训
  • 无人机航拍WiFi图传模块,16公里实时高清图传性能和技术参数
  • 视频元素在富文本编辑器中的光标问题
  • 企业网站内容如何搭建推荐做木工的视频网站
  • grounding dino 源码部署 cuda12.4 开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)模型
  • 一个虚拟主机可以做几个网站吗毕设做网站心得体验
  • Spring使用SseEmitter实现后端流式传输和前端Vue数据接收
  • 湖南省新闻最新消息十条深圳seo网站推广方案
  • 语音交互接待服务机器人深度推荐
  • 创建学校网站吗网站搭建工具的种类
  • Linux-ARM-裸机开发-开发环境搭建
  • 2025年校园招聘平台怎么选?
  • 如何把视频放到自己的网站ftp怎么重新上传网站
  • minio文件迁移
  • 网站反链接是什么意思wordpress 侧边收起
  • docker-desktop 分发版不支持用户数据挂载
  • 部署LVS NAT集群
  • 使用 feature_engine库 提升你的机器学习特征工程效率
  • 做网站网络公司无收入域名管理系统