express框架使用

一、express介绍

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

二、express 使用

2.1 express 下载

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

npm init
npm i express

2.2 express 初体验

搭建express框架基本步骤如下:

       1.创建 JS 文件,键入如下代码

const express = require('express')//创建express对象
const app = express();app.get('/home',(req,res)=>{res.end('hello express')
})//监听
app.listen(9000,()=>{console.log('端口已启动。。。')
})

      2.命令行下执行该脚本

node <文件名>
# 或者
nodemon <文件名>

      3.然后在浏览器就可以访问 http://127.0.0.1:3000/home 

三、express 路由

3.1 什么是路由

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

3.2 路由的使用 

 一个路由的组成有 请求方法 , 路径 和 回调函数 组成

express 中提供了一系列方法,可以很方便的使用路由,使用格式如下:

app.<method>(path,callback)

示例代码

const express = require('express')//创建express对象
const app = express();
//get路由
app.get('/home',(req,res)=>{res.end('hello express')
})
//首页路由
app.get('/home',(req,res)=>{res.end('hello express')
})//post路由
app.post('/login',(req,res)=>{res.end('login')
})
//无论请求是什么方法,只要符合路径就会返回结果  匹配所有方法
app.all('/test',(req,res)=>{res.end('test  test')
})//匹配404
app.all('*',(req,res)=>{res.end('404 not found')
})//监听
app.listen(9000,()=>{console.log('端口已启动。。。')
})

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 响应设置

express 框架封装了一些 API 来方便给客户端响应数据,并且兼容原生 HTTP 模块的获取方式

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(); //响应 JSONres.sendFile(__dirname + '/home.html') //响应文件内容
});

五、express 中间件

5.1 什么是中间件

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

5.2 中间件的作用

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

5.3 中间件的类型

  • 全局中间件
  • 路由中间件

5.3.1 定义全局中间件

每一个请求 到达服务端之后 都会执行全局中间件函数

声明中间件函数

let recordMiddleware = function(request,response,next){//实现功能代码//.....//执行next函数(当如果希望执行完中间件函数之后,仍然继续执行路由中的回调函数,必须调用next)next();
}

应用中间件

app.use(recordMiddleware);

声明时可以直接将匿名函数传递给 use

app.use(function (request, response, next) {console.log('定义第一个中间件');next();
})

5.3.2 多个全局中间件

express 允许使用 app.use() 定义多个全局中间件

app.use(function (request, response, next) {console.log('定义第一个中间件');next();
})
app.use(function (request, response, next) {console.log('定义第二个中间件');next();
})

5.3.3 定义路由中间件

如果 只需要对某一些路由进行功能封装 ,则就需要路由中间件

调用格式如下:

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

 5.4 静态资源中间件

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 端口启动....');
});

注意事项:

1. index.html 文件为默认打开的资源

2. 如果静态资源与路由规则同时匹配,谁先匹配谁就响应

3. 路由响应动态资源,静态资源中间件响应静态资源

5.5 获取请求体数据 body-parser

express 可以使用 body-parser 包处理请求体

第一步:安装

npm i body-parser

第二步:导入 body-parser 包 

const bodyParser = require('body-parser');

 第三步:获取中间件函数

//处理 querystring 格式的请求体
let urlParser = bodyParser.urlencoded({extended:false}));
//处理 JSON 格式的请求体
let jsonParser = bodyParser.json();

第四步:设置路由中间件,然后使用 request.body 来获取请求体数据

app.post('/login', urlParser, (request,response)=>{//获取请求体数据//console.log(request.body);//用户名console.log(request.body.username);//密码console.log(request.body.userpass);response.send('获取请求体数据');
});

六、Router

6.1 什么是 Router

express 中的 Router 是一个完整的中间件和路由系统,可以看做是一个小型的 app 对象。

6.2 Router 作用

对路由进行模块化,更好的管理路由

6.3 Router 使用

创建独立的 JS 文件(homeRouter.js)

//1. 导入 express
const express = require('express');
//2. 创建路由器对象
const router = express.Router();
//3. 在 router 对象身上添加路由
router.get('/', (req, res) => {res.send('首页');
})
router.get('/cart', (req, res) => {res.send('购物车');
});
//4. 暴露
module.exports = router;

主文件

const express = require('express');
const app = express();
//5.引入子路由文件
const homeRouter = require('./routes/homeRouter');
//6.设置和使用中间件
app.use(homeRouter);
app.listen(3000,()=>{console.log('3000 端口启动....');
})

七、EJS 模板引擎

7.1 什么是模板引擎

模板引擎是分离 用户界面和业务数据 的一种技术

7.2 什么是 EJS

EJS 是一个高效的 Ja

vascript 的模板引擎 

7.3 EJS 初体验

下载安装EJS

npm i ejs --save

示例代码

//1.引入ejs
const ejs = require('ejs');
//2.定义数据
let person = ['张三','李四','王二麻子'];
//3.ejs解析模板返回结构
//<%= %> 是ejs解析内容的标记,作用是输出当前表达式的执行结构
let html = ejs.render(‘<%= person.join(",") %>’, {person:person});
//4.输出结果
console.log(html);

7.4 EJS 常用语法

执行JS代码

<% code %>

输出转义的数据到模板上

<%= code %>

 输出非转义的数据到模板上

<%- code %>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/214332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【组合数学】递推关系

目录 1. 递推关系建立2. 常系数齐次递推关系的求解3. 常系数非齐次递推关系的求解4. 迭代法 1. 递推关系建立 给定一个数的序列 f ( 0 ) , f ( 1 ) , . . . , f ( n ) , . . . , f (0), f(1), ..., f(n ),... , f(0),f(1),...,f(n),..., 若存在整数 n 0 n_0 n0​ &#xff…

datav-实现轮播表,使用updateRows方法-无缝衔接加载数据

前言 最近在做大屏需求的时候&#xff0c;遇到一个轮播数据的需求&#xff0c;查看datav文档发现确实有这个组件 但这个组件只提供了一次加载轮播的例子&#xff0c;虽然提供了轮播加载数据updateRows方法 但是文档并没有触发事件&#xff0c;比如轮播完数据触发事件&#xf…

ESL电子标签的真相:电子墨水屏没墨水?

一说到电子墨水屏 你大概率会想到Kindle 如果你问是不是墨水做的 那这篇文章你就得好好看看了 在我们日常与客户的沟通中 为数不多却出乎意料地有好几个以下对话↓ 在此辟谣 电子墨水屏里确实 没 有 墨 水 那它是什么样的原理&#xff1f;为什么越来越多显示设备采用&…

Abp vNext在Docker部署并导出镜像

Docker介绍 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何…

深度剖析中国居民消费价格指数CPI数据可视化案例-Python可视化技术实现(附完整源码)【数据可视化项目案例-16】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本专栏包括所有的可视化技术学习,感兴趣可以到本专栏页面,查阅可视化宝典可快速了解本专栏。订阅专栏用户可以在每篇文章底部下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不论…

Win11在Virtualbox上安装ubuntu操作系统

注&#xff1a;原创笔记&#xff0c;以下图片水印为本人 相关工具展示 第四个&#xff1a;ubuntu的vmdk文件&#xff0c;用于配置虚拟机 第5/6个&#xff1a;virtualbox安装包 一、安装 VirtualBox 由于win11版本问题&#xff0c;如果装不了 virtualBox需要在官网安装最新版…

新零售模式:跨境电商如何实现线上线下融合?

随着数字时代的发展&#xff0c;新零售模式逐渐崭露头角&#xff0c;成为跨境电商发展的重要趋势。线上线下融合不仅拓宽了销售渠道&#xff0c;更提供了更丰富、更便捷的购物体验。 本文将深入探讨新零售模式在跨境电商中的应用&#xff0c;以及如何实现线上线下融合&#xf…

前后端请求之nginx配置

问题&#xff1a; 前端发送的请求&#xff0c;是如何请求到后端服务器的&#xff1f; 如&#xff0c;前端请求地址&#xff1a;http://loclhost/api/employee/login&#xff1a; 后端相应请求地址&#xff1a;http://loclhost:8080/admin/employee/login 回答&#xff1a; …

使用MfgTool烧写前需准备的文件

一. 简介 本文我们就来学习&#xff0c;如何将我们编译的 uboot&#xff0c;zImage&#xff08;内核镜像&#xff09;&#xff0c;xxx.dtb设备树文件&#xff0c;还有制作的根文件系统&#xff0c;这四个文件烧写到开发板中&#xff0c;最后 开发板能正常启动。 本文这里使用…

【日志技术】附Logback入门教程

文章目录 日志概论日志的体系Logback快速入门日志配置文件配置日志级别 日志概论 什么是日志&#xff1f;其实可以通过下面几个问题来了解的。 系统系统能记住某些数据被谁操作&#xff0c;比如被谁删除了&#xff1f;想分析用户浏览系统的具体情况&#xff0c;比如挖掘用户的…

一个简单的Python自动化测试 logging 日志模块,为何会难住一个工作6年的测试?

写Python程序的时候&#xff0c; 我们经常需要写日志&#xff0c; 以便调试程序&#xff0c;发现问题&#xff0c;以及查看程序的运行状态。 Python自带了logging模块&#xff0c;可以将日志保存到.txt文件中&#xff0c; 也可以输入到界面上。 我们希望日志有一定的格式, 比…

【性能优化】性能优化实战

一、背景 在做code review的时候&#xff0c;经常会发现&#xff0c;因为开发习惯问题&#xff0c;很多研发人员喜欢在for循环中查询数据库。今天用一个真实例子&#xff0c;记录一次查询性能优化的例子 二、示例 代码如下: classmethod fn_performance() def get_task_ins…

Linux常用调试工具gdb

程序编译后&#xff0c;调试是十分重要的环节&#xff0c;如何更好更快的定位程序中的问题&#xff0c; 是加快程序开发进度的重要因素。Gdb 调试器是一款 GNU 开发组织并发布的 UNIX/Linux 下的程序调试工 具。GDB调试 编译要点 对代码进行编译&#xff0c;注意一定要加上选项…

【C语言】【数据结构】自定义类型:结构体

引言 这是一篇对结构体的详细介绍&#xff0c;这篇文章对结构体声明、结构体的自引用、结构体的初始化、结构体的内存分布和对齐规则、库函数offsetof、以及进行内存对齐的原因、如何修改默认对齐数、结构体传参进行介绍和说明。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&am…

Ubuntu——永久挂载/卸载硬盘

Ubuntu——永久挂载/卸载硬盘 一、挂载1. 查询硬盘2. 格式化硬盘3. 挂载硬盘4. 开机自动挂载5. 查看挂载是否成功 二、取消挂载参考资料&#xff1a; 一、挂载 1. 查询硬盘 sudo fdisk -l2. 格式化硬盘 # 格式化硬盘(/dev/sda)的文件系统&#xff0c;这里格式化为 ext4 系统…

面试经典150题(3-4)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第二天&#xff09;完成了两道(3-4)150&#xff1a; (26. 删除有序数组中的重复项) 题目描述&#xff1a; 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使…

C#生成Token字符串

Token字符串来保证数据安全性&#xff0c;如身份验证、跨域访问等。但是由于Token字符串的长度比较长&#xff0c;可能会占用过多的空间和带宽资源&#xff0c;因此我们需要生成短的Token字符串 方法一&#xff1a;使用Base64编码 Base64编码是一种常用的编码方式&#xff0c…

测试:接口参数测试

接口参数测试是接口测试中非常重要的一部分&#xff0c;主要是为了验证接口在不同参数输入下的行为和响应。下面详细介绍一下接口参数测试的相关内容&#xff1a; 参数必填与非必填测试&#xff1a;需要测试接口对必填参数和非必填参数的处理。对于必填参数&#xff0c;不提供…

【学习笔记】LLM for Education

ChatGPT has entered the classroom: how LLMs could transform education 前言IntroductionThe risks are realEmbracing LLMsIntroducing the AI tutorAugmenting retrievalWill it catch on?总结 前言 一篇来自Nature的文章&#xff0c;探讨了教育行业的不同参与者&#x…

webSRc实现浏览器播放rtsp【海康】

先上代码 <template><div>video的配置自己写<video id"video" autoplay width"900" height"900"></video></div> </template><script> export default {name: index1,data() {return {webRtcServer: …