位置: IT常识 - 正文

【node.js从入门到精通】使用express创建web服务器,路由,进行中间件的创建链接路由及其他中间件(node.js快速入门)

发布时间:2024-01-17
【node.js从入门到精通】使用express创建web服务器,路由,进行中间件的创建链接路由及其他中间件

目录

前言

初识express

使用express创建基本的web服务器

初识express路由

路由匹配概念

路由模块化

中间件

中间件和路由的区别

定义中间件函数

中间件作用 

 局部生效中间价

中间件分类

 1.应用级别中间件

 2.路由级别的中间件

 3.错误级别中间件

 4.内置中间件

 5.自定义中间件

写在最后


推荐整理分享【node.js从入门到精通】使用express创建web服务器,路由,进行中间件的创建链接路由及其他中间件(node.js快速入门),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node.js 入门,node·js,node.js教程详细,node.js快速入门,node.js基础入门,node.js基础入门,node-js,node.js快速入门,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

express特别像node.js内置的http模块一样,帮助我们来创建web服务器的,express实际上就是npm中的一个第三方的包,它里面提供了快捷创建Web服务器的方法,本篇将讲到如何使用express进行web服务器和路由的创建

初识express

既然是一个包那么首先就要进行安装这个包

使用npm i express@4.17.1来进行安装,安装成功后就可以直接使用了

express给我们带来的主要效果就是进行一个服务器的创建,那么下面就让我们一起来进行一个最基本的服务器创建

使用express创建基本的web服务器

web服务器的创建一共分为三部

1.导入express

2.创建web服务器

3.调用app.listen(端口号,回调函数),启动服务

// 导入expressconst express = require('express');// 创建web服务器const app = express();// 调用app.listenapp.listen(80, () => { console.log('express server running at http://localhost');})

这样一个简单的服务器就创建好了(这么一看和http的用法差不多吗)

用get和post进行一个请求的监听

● 监听GET请求

 ● 监听post请求

 ● 获取URL中携带的查询参数

通过req.query对象,可以访问到客户端通过查询字符串的形式,发送到服务器的参数

● 获取url中动态参数

● 托管静态资源

通过express.static()创建一个静态资源服务器

 注:多次使用express.static()就可以得到多个静态资源服务器了

初识express路由

在Express中,路由指的是客户端的请求与服务器处理函数之间的映射关系。 Express中的路由由3部分组成,分别是请求的类型、请求的URL地址、处理函数

 METHON(请求类型) PATH(请求URL地址) HANDLER(处理函数)

路由匹配概念

当一个请求到达服务器之后,需要先经过路由的匹配,匹配成功之后,调用对应的处理函数。 在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的URL同时匹配成功,Express会将这次请求,转交给对应的function函数进行处理。(也就是说满足请求类型和请求的URL同时匹配成功这个条件时才能进行函数处理,否则不会进行对客户端的请求进行处理)

注:路由会按照定义的先后顺序自上而下进行匹配,并且请求类型和请求的URL必须匹配成功才能进行函数处理

1.导入express模块。2,挂载路由。3,监听80端口

const express = require('express');const app = express()// 挂载路由app.get('/', (req, res) => { res.send('hello friend')})app.post('/', (req, res) => { res.send('hello my friend')})app.listen(80, () => { console.log('express server running at http://localhost');})路由模块化【node.js从入门到精通】使用express创建web服务器,路由,进行中间件的创建链接路由及其他中间件(node.js快速入门)

就是将路由模块单独提出来,进行暴露共享,然后再供其他的模块使用

const express = require('express');// 导入expressconst router = express.Router();// 使用express.Router()创建路由对象router.get('/user/list', (req, res) => { res.send('GET user list. ');});router.post('/user/add', (req, res) => { res.send('Add new user. ')});// 挂载路由module.exports = router;// 暴露共享对象

使用路由模块

const express = require('express');const app = express()// 导入路由模块const router = require('./04路由模块化.js')// 注册路由模块,挂载前缀app.use(router);// app.use()用来注册全局中间件app.listen(80, () => { console.log('express server running at http://localhost');})中间件中间件和路由的区别

express的中间件本质上是一个函数,它类似于路由处理函数我们可以进行一下对比

区分他俩的标志就是next这个参数,有next函数的就是中间件的处理函数,没有的就是路由处理函数,在预处理中next函数至关重要next函数是实现多个中间件连续调用的关键,它表示把流转关系转交给下一一个中间件或路由。

定义中间件函数

跟路由很相似

const express = require('express');const app = express();// 定义一个简单的中间件函数const mw = (req, res, next) => { console.log('中间件函数'); next();}app.listen(80, () => { console.log('http://localhost');})

全局中间件

就是客户端无论发起什么请求,到达服务器之后都得出发的中间件叫做全局中间件

简化中间件函数

中间件作用 

多个中间件之间,共享同一份req和res。基于这样的特性,我们可以在前面的的中间件中,统一为req或res对象添加自定义的属性或方法,供后面的的中间件或路由进行使用。(简而言之,中间件里面的req,res可以供给后面的中间件或者是路由使用)

 局部生效中间价

不使用app.use()定义的中间件,叫做局部生效的中间件

const express = require('express');const app = express();// 1.定义中间件函数const mw1 = (req, res, next) => { console.log('局部中间件已调用'); next()}// 2.创建路由app.get('/', mw1, (req, res) => { res.send('Home page.')})app.get('/user', (req, res) => { res.send('User page.')})app.listen(80, function () { console.log('Express ');})

注意事项:  

①一定要在路由之前注册中间件 ②客户端发送过来的请求,可以连续调用多个中间件进行处理 ③执行完中间件的业务代码之后,不要忘记调用next()函数 ④为了防止代码逻辑混乱,调用next()函数后不要再写额外的代码 ⑤连续调用多个中间件时,多个中间件之间,共享req和res对象

中间件分类

在express中,把中间件分为了五大类分别是

1.应用级别中间件

(通过app.use()/app.get()/app.post(),绑定到app实例上的中间件)

 

 2.路由级别的中间件

 (绑定到express.Router(实例上的中间件,叫做路由级别的中间件。它的用法和应用级别中间件没有任何区别。只不过,应用级别中间件是绑定到app实例上,路由级别中间件绑定到router实例上)

 3.错误级别中间件

(专门用来捕获整个项目中发生的异常错误,从而防止项目异常崩溃的问题。错误级别中间件的function处理函数中,必须有4个形参,形参顺序从前到后,分别是(err, req, res, next),错误级别的中间件一定要在路由后面否则不会执行该错误级别中间件。)

 4.内置中间件

1.express.static快速托管静态资源的内置中间件

2.express.json解析JSON格式的请求体数据(4.16.0及以上版本可用)

3.express.urlencoded解析URL-encoded格式的请求体数据(4.16.0及以上版本可用)

 4.body-parser的使用

// 导入express 模块const express = require('express');const app = express();// 导入body-parserconst parser = require('body-parser');// 注册中间件app.use(parser.urlencoded({ extended: false }))app.post('/', (req, res) => { // 如果没有配置任何解析表单数据的中间件,则req. body默认等于undefined console.log(req.body); res.send('ok')})app.listen(80, () => { console.log('express server running at http://127.0.0.1');})5.自定义中间件

将该模块进行封装

// 导入querystring内置模块const qs = require('querystring');const parser = (req, res, next) => { // 用来储存客户端发送的数据 let str = '' // 监听req的data事件 req.on('data', (chunk) => { str += chunk; }) // 监听req的end事件 req.on('end', () => { // 打印储存完整的请求体数据 // 使用querystring内置模块解析请求体数据 // 把字符串数据解析为对象格式 // 将解析出来的数据对象挂载为req.body const body = qs.parse(str); req.body = body; next() })}module.exports = parser;

 使用该模块

const express = require('express');const app = express();// 导入querystring内置模块const qs = require('querystring');// 定义解析表单的中间件具体的业务逻辑const cousttomParser = require('./12对自定义的中间件进行模块化')app.use(cousttomParser)app.post('/', (req, res) => { res.send(req.body)})app.listen(80, () => { console.log('express server running at http://127.0.0.1');})

使用apipost发送请求

写在最后

点赞👍:您的赞赏是我前进的动力! 收藏⭐:您的支持我是创作的源泉! 评论✍:您的建议是我改进的良药! 山鱼🦈的个人社区:欢迎大家加—— 山鱼社区

本文链接地址:https://www.jiuchutong.com/zhishi/300321.html 转载请保留说明!

上一篇:【Pytorch】torch.nn.init.xavier_uniform_()(pytorch torch)

下一篇:区块链开发完整指南。如何开发一款区块链项目?(区块链技术开发入门)

  • 印花税办理流程
  • 征收率 税率 区别
  • 个人给单位做事怎么开发票
  • 厂房设计费计入在建工程吗
  • 发票的规格和型号有哪些
  • 固定资产税前一次性扣除政策中的扣除十点
  • 事业单位大型修缮会计分录
  • 小型企业缴纳企业所得税
  • 企业优化什么意思
  • 并购对利润的影响
  • 小企业会计准则2023电子版
  • 租金发票会计分录
  • 减免税款期末有余额吗
  • 增值税已交税金什么情况下使用
  • 餐听发票可以开专用发票吗?
  • 不锈钢交几个点税
  • 企业所得税季度预缴
  • 建筑发票怎么抵税
  • 进项税额忘了抵扣
  • 预交增值税抵减申报
  • 汇算清缴退税调整利润表
  • 印花税按含税收入还是不含税收入
  • 代发保险款收入
  • 服务,不动产和无形资产扣除项目明细
  • 如何进行降压治疗
  • 谨慎性原则的具体体现有哪些
  • 发票金额大于实付金额,要怎么入账
  • 华为设置输入法手写
  • u启动pe装机工具如何重装系统win10
  • php连接mysql查询数据
  • 母公司投资收益和子公司
  • php 字符串 数组
  • php中的require
  • live updater
  • ryzen3 2200配显卡
  • vue3+vite在main.ts或者main.js文件中引入/App.vue报错(/App.vue不是模块)
  • PHP:iconv_mime_decode_headers()的用法_iconv函数
  • 收到借款利息会计科目
  • php单例模式demo
  • 产品注册费会计科目
  • 待抵扣进项税的限额是什么
  • tensorboard作用
  • 会计有哪几种
  • 面试学弟学妹问题
  • uni-app实例教程
  • linux0.11编译
  • php分页函数封装
  • 管理费用中的福利费有限额吗
  • 怎样网上抄税
  • 购买二手设备
  • 折扣和佣金合法的两个条件是什么?
  • 财政拨款结转是
  • 算税负是含税还是不含税
  • 无形资产开发阶段的支出应当全部资本化
  • 避税的形式
  • 公司组织员工旅游需要交个税吗
  • 应收账款周转率越大越好还是越小越好
  • 工程施工怎么做账
  • 会议费报销管理办法
  • 商业承兑汇票结算会计分录
  • 小规模公司一般开什么发票
  • 报销差旅费属于付款凭证还是收款凭证
  • 加计抵减四项服务是什么?
  • 固定资产怎么编号方便
  • 明细账摘要写错了怎么修改
  • win8.1快捷键
  • macos终端命令
  • linux tar -zxf
  • win7如何安装kb3033929补丁
  • 用linux配置ftp服务器的过程
  • linux小技巧
  • opengl learning
  • js随机抽取姓名
  • 了不起的女孩
  • unity3d怎么移动物体
  • unity strangeioc
  • Using Django with GAE Python 后台抓取多个网站的页面全文
  • jq form提交
  • 税务筹划企业所得税案例分析题
  • 福建是高原还是平原
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号