位置: IT常识 - 正文

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

编辑:rootadmin
【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)

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

  • win7语言栏不见了切换不出来(win7语言栏不见了怎么办)(win7语言栏不见了也切换不了中文)

    win7语言栏不见了切换不出来(win7语言栏不见了怎么办)(win7语言栏不见了也切换不了中文)

  • 手机一放声音就滋滋声(手机一放声音就滋滋声怎么办)

    手机一放声音就滋滋声(手机一放声音就滋滋声怎么办)

  • 隐藏会话关联qq看得到吗(隐藏会话关联qq会显示未读吗)

    隐藏会话关联qq看得到吗(隐藏会话关联qq会显示未读吗)

  • 华为手机浮动球怎么取消(华为手机浮动球在哪里)

    华为手机浮动球怎么取消(华为手机浮动球在哪里)

  • 华为手机怎么建微信群(华为手机怎么建隐藏相册)

    华为手机怎么建微信群(华为手机怎么建隐藏相册)

  • cad命令栏如何还原(cad命令栏怎么掉出来)

    cad命令栏如何还原(cad命令栏怎么掉出来)

  • 小米净水器怎么连接手机(小米净水器怎么样好不好用)

    小米净水器怎么连接手机(小米净水器怎么样好不好用)

  • 卡槽怎么放卡(苹果双卡双待卡槽怎么放卡)

    卡槽怎么放卡(苹果双卡双待卡槽怎么放卡)

  • 微博用户不存在什么意思(微博用户不存在是怎么回事)

    微博用户不存在什么意思(微博用户不存在是怎么回事)

  • 华为ELSAN00是什么手机(华为elsan00是什么型号多少钱)

    华为ELSAN00是什么手机(华为elsan00是什么型号多少钱)

  • 抖音点赞对方知道是谁吗(抖音点赞对方知道位置吗)

    抖音点赞对方知道是谁吗(抖音点赞对方知道位置吗)

  • 电脑版钉钉怎么下载(电脑版钉钉怎么打卡签到)

    电脑版钉钉怎么下载(电脑版钉钉怎么打卡签到)

  • word添加黄色底纹(word2010添加黄色底纹)

    word添加黄色底纹(word2010添加黄色底纹)

  • 超融合和虚拟化的区别(超融合和虚拟化哪个好)

    超融合和虚拟化的区别(超融合和虚拟化哪个好)

  • rabbitmq几种工作模式(rabbitmq的工作流程)

    rabbitmq几种工作模式(rabbitmq的工作流程)

  • 苹果11锁屏慢是什么原因(苹果11锁屏慢了)

    苹果11锁屏慢是什么原因(苹果11锁屏慢了)

  • a1549是什么版本(a1554是什么版本)

    a1549是什么版本(a1554是什么版本)

  • cache是外存储器嘛(cache存储器是内存储器吗)

    cache是外存储器嘛(cache存储器是内存储器吗)

  • 抖音极速版可以拍视频吗(抖音极速版可以买东西吗)

    抖音极速版可以拍视频吗(抖音极速版可以买东西吗)

  • 为什么华为手机晚上微信消息不提示(为什么华为手机屏幕变成黑白色)

    为什么华为手机晚上微信消息不提示(为什么华为手机屏幕变成黑白色)

  • oled烧屏是什么意思(oled烧屏的概率大吗)

    oled烧屏是什么意思(oled烧屏的概率大吗)

  • 华为nova5pro能不能开空调(华为nova5pro能不能控制空调)

    华为nova5pro能不能开空调(华为nova5pro能不能控制空调)

  • 个人热点会传播病毒吗(个人热点有辐射吗)

    个人热点会传播病毒吗(个人热点有辐射吗)

  • 魅族16sPro怎么设置呼吸灯(魅族16th设置)

    魅族16sPro怎么设置呼吸灯(魅族16th设置)

  • 表格如何查找并筛选(表格如何查找并删除重复内容)

    表格如何查找并筛选(表格如何查找并删除重复内容)

  • 红米note8pro屏幕刷新率(红米note8pro屏幕分辨率)

    红米note8pro屏幕刷新率(红米note8pro屏幕分辨率)

  • 头条号双标题在哪开通(头条号双标题在哪里设置)

    头条号双标题在哪开通(头条号双标题在哪里设置)

  • 苹果airpods安卓能用吗(苹果airpods可以连接安卓手机吗)

    苹果airpods安卓能用吗(苹果airpods可以连接安卓手机吗)

  • 机械键盘轴的区别声音(机械键盘轴的区别图)

    机械键盘轴的区别声音(机械键盘轴的区别图)

  • 代付的费用收不收手续费
  • 外国人在中国工作签证
  • 招标代理服务费由谁支付
  • 滴滴出行开具的运输服务电子普通发票
  • 以前年度损益调整属于哪类科目
  • 索赔费用项目
  • 软件和硬件可以用什么代名词
  • 生产中材料的合理损耗核算
  • 保教费免征增值税政策
  • 税金及附加科目有
  • 专票的税金
  • 以前年度漏记一笔短期借款但本金利息支出记账了
  • 工伤期间奖金发放标准
  • 免费送试用装的话术
  • 地税开发票为啥要交百分之二的企业所得税?
  • 非独立核算的分公司是法人主体吗
  • 融资租赁 车辆
  • 景区门票入什么费用
  • 不得抵扣啥意思
  • 业务招待费怎么调整应纳税所得额
  • 少数股东损益借方增加还是贷方增加
  • 小规模纳税人优惠政策类型怎么选
  • 进口付汇核销流程
  • 公司没有发票的做内账,那么支付款从哪里来
  • 生产测试是指什么
  • 现金日记账余额为零要怎么填
  • 收到股改代扣代缴税款
  • 厂区道路施工步骤
  • 苹果手机把旧手机的照片传到新手机
  • mac电脑键盘进水,键盘不可以用了
  • 企业职工工伤赔偿标准
  • 支付人工费会计科目
  • phpurl编码
  • 多台电脑如何共享一台惠普打印机
  • 保险中介手续费规定最新
  • 特殊性税务处理的条件
  • Zend Framework+smarty用法实例详解
  • 应交增值税明细科目怎么看
  • php读取文件
  • linux系统中安装auto dock
  • cms静态页面生成原理
  • FPGA实现64点IFFT(VHDL)
  • 帝国cms移动端
  • 无形资产减值准备可以转回吗
  • 个人社保信息变更流程
  • 水利基金差额征收有哪些类型
  • 影响无形资产的营业利润怎么算
  • 增值税不用计提吗
  • 小规模纳税人上限
  • 关税怎么入账
  • 工程项目买保险需要哪些资料
  • 免抵退税和留抵退税计算题
  • 采用账龄分析法计提坏账准备时,收到
  • 会计凭证保管期限30年是哪一年开始的
  • 水利建设基金一直没缴纳
  • 工程施工和工程造价哪个好
  • 现金日记账金额怎么填写
  • 公司被冻结
  • 没有销货清单的发票可以报销吗
  • mysql全部语法
  • Centos7 下Mysql5.7.19安装教程详解
  • u盘界面可以设置背景吗
  • linux安装rpm软件包的命令
  • win8管理员权限怎么打开
  • win10系统如何快速打开控制面板
  • xp系统的程序和功能在哪里
  • ibm文件是什么意思
  • qq突然显示windows登录
  • 如何进入xp系统
  • win10预览版21390
  • 批处理实现电脑登陆二次验证
  • unityapi解析
  • jQuery checkbox选中问题之prop与attr注意点分析
  • html5webview交互
  • jquery lazyload
  • 欢迎使用本公司智能语音电动车音效
  • jquery的gt
  • android 获取时区
  • 地税登记证编号是哪几位
  • 海南海葬需要多少费用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设