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

【Nodejs】六、express框架

目录

一、express 介绍

二、express 使用

2.1 express 下载

2.2 express 使用

三、express 路由

3.1 什么是路由

3.2 路由的使用

3.3 获取请求参数

3.4 获取路由参数

四、express 响应设置

五、express 中间件

5.1 什么是中间件

5.2 中间件的作用

5.3 中间件的类型

5.4 定义全局中间件

5.5 定义路由中间件

5.6 静态资源中间件


一、express 介绍

express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架,官方网址: https://www.expressjs. com.cn/
简单来说, express 是一个封装好的工具包,封装了很多功能,便于我们开发 WEB 应用( HTTP 服务)

二、express 使用

2.1 express 下载

express 本身是一个 npm 包,所以可以通过 npm 安装
npm init
npm i express

2.2 express 使用

1. 创建 JS 文件
//1. 导入 express
const express = require('express');
//2. 创建应用对象
const app = express();
//3. 创建路由规则
app.get('/home', (req, res) => {
res.end('hello express server');
});
//4. 监听端口 启动服务
app.listen(3000, () =>{
console.log('服务已经启动, 端口监听为 3000...');
});
2. 命令行下运行
node <文件名>
# 或者
nodemon <文件名>
3. 然后在浏览器就可以访问 http://127.0.0.1:3000/home 👌

三、express 路由

3.1 什么是路由

官方定义: 路由确定了应用程序如何响应客户端对特定端点的请求

3.2 路由的使用

一个路由的组成有 请求方法 路径 回调函数 组成
express 中提供了一系列方法,可以很方便的使用路由,使用格式如下:
//导入 express
const express = require('express');
//创建应用对象
const app = express();
//创建 get 路由
app.get('/home', (req, res) => {
res.send('网站首页');
});
//首页路由
app.get('/', (req,res) => {
res.send('我才是真正的首页');
});
//创建 post 路由
app.post('/login', (req, res) => {
res.send('登录成功');
});
//匹配所有的请求方法
app.all('/search', (req, res) => {
res.send('1 秒钟为您找到相关结果约 100,000,000 个');
});
//自定义 404 路由
app.all("*", (req, res) => {
res.send('<h1>404 Not Found</h1>')
});
//监听端口 启动服务
app.listen(3000, () =>{
console.log('服务已经启动, 端口监听为 3000');
});

3.3 获取请求参数

express 框架封装了一些 API 来方便获取请求报文中的数据,并且兼容原生 HTTP 模块的获取方式
//导入 express
const express = require('express');
//创建应用对象
const app = express();
//获取请求的路由规则
app.get('/request', (req, res) => {
//1. 获取报文的方式与原生 HTTP 获取方式是兼容的
console.log(req.method);
console.log(req.url);
console.log(req.httpVersion);
console.log(req.headers);
//2. express 独有的获取报文的方式
//获取查询字符串
console.log(req.query); // 『相对重要』
// 获取指定的请求头
console.log(req.get('host'));
res.send('请求报文的获取');
});
//启动服务
app.listen(3000, () => {
console.log('启动成功....')
})

3.4 获取路由参数

路由参数指的是 URL 路径中的参数(数据)
app.get('/:id.html', (req, res) => {
res.send('商品详情, 商品 id 为' + req.params.id);
});

四、express 响应设置

//获取请求的路由规则
app.get("/response", (req, res) => {
//1. express 中设置响应的方式兼容 HTTP 模块的方式
res.statusCode = 404;
res.statusMessage = 'xxx';
res.setHeader('abc','xyz');
res.write('响应体');
res.end('xxx');
//2. express 的响应方法
res.status(500); //设置响应状态码
res.set('xxx','yyy');//设置响应头
res.send('中文响应不乱码');//设置响应体
//连贯操作
res.status(404).set('xxx','yyy').send('你好朋友')
//3. 其他响应
res.redirect('http://atguigu.com')//重定向
res.download('./package.json');//下载响应
res.json();//响应 JSON
res.sendFile(__dirname + '/home.html') //响应文件内容
});

五、express 中间件

5.1 什么是中间件

中间件( Middleware )本质是一个回调函数
中间件函数 可以像路由回调一样访问 请求对象( request 响应对象( response

5.2 中间件的作用

中间件的作用 就是 使用函数封装公共操作,简化代码

5.3 中间件的类型

全局中间件
路由中间件

5.4 定义全局中间件

每一个请求 到达服务端之后 都会执行全局中间件函数
声明中间件函数
let recordMiddleware = function(request,response,next){
//实现功能代码
//.....
//执行next函数(当如果希望执行完中间件函数之后,仍然继续执行路由中的回调函数,必须调用next)
next();
}
应用中间件
app.use(recordMiddleware);
声明时可以直接将匿名函数传递给 use
app.use(function (request, response, next) {
console.log('定义第一个中间件');
next();
})

5.5 定义路由中间件

app.get('/路径',`中间件函数`,(request,response)=>{
});
app.get('/路径',`中间件函数1`,`中间件函数2`,(request,response)=>{
})

5.6 静态资源中间件

express 内置处理静态资源的中间件
//引入express框架
const express = require('express');
//创建服务对象
const app = express();
//静态资源中间件的设置,将当前文件夹下的public目录作为网站的根目录
app.use(express.static('./public')); //当然这个目录中都是一些静态资源
//如果访问的内容经常变化,还是需要设置路由
//但是,在这里有一个问题,如果public目录下有index.html文件,单独也有index.html的路由,
//则谁书写在前,优先执行谁
app.get('/index.html',(request,response)=>{
respsonse.send('首页');
});
//监听端口
app.listen(3000,()=>{
console.log('3000 端口启动....');
});

http://www.lryc.cn/news/429261.html

相关文章:

  • 进阶 pro max
  • Agentic Security:一款针对LLM模型的模糊测试与安全检测工具
  • Spring Cloud Config 与 Spring Cloud Bus 来实现动态配置文件
  • Qt:Qt背景
  • 【数据结构】选择排序
  • 国产GD32单片机开发入门(二)GD32单片机详解
  • 8个我平时每天都会看的网站,涵盖办公、娱乐、学习等
  • Vue2——父子之间间的调用
  • xfs Vs ext4?
  • 数据结构stack (笔记)
  • SQL - 创建 表和数据库
  • 使用 Arch Linux 几个月有感 | 为什么我选择 Arch Linux ,Arch 的优缺点有什么 | 一些Linux发行版推荐
  • SQLserver中的增删改查和数据类型
  • 个人收藏个性化、实用性、可玩性在线网站持续更新,与君共享
  • win10蓝牙只能发送,无法接收
  • 【论文阅读03】用于海洋物体检测的多注意力路径聚合网络
  • Linux 进程(2)
  • [CSCCTF 2019 Qual]FlaskLight1
  • layui table表单 checkbox选中一个其它也要选中
  • 【pip镜像设置】pip使用清华镜像源安装
  • c++ 智能指针--std::shared_ptr
  • 网络工程师学习笔记(二)
  • 90.WEB渗透测试-信息收集-Google语法(4)
  • 阿里Qwen2开源大模型本地部署及调试全攻略
  • 『功能项目』移动后的光标显示【04】
  • HTML 基本语法特性与 title 标签介绍
  • CSS的:placeholder-shown伪类:精确控制输入框占位符样式
  • Java之HashMap的底层实现
  • 多张图片进行模型重建并转换为OBJ模型
  • 信息安全保证人员CISAW:安全集成