七爪源码:让我们了解 Express.js 中的中间件

七爪源码:让我们了解 Express.js 中的中间件

Express.js 中的中间件概念简单有趣的介绍

如果你已经在 Node.js 周围呆了足够长的时间,你可能已经听说过中间件,我不会撒谎,当我第一次遇到 WORD ITSELF 时我很困惑所以更不用说中间件的实现了,但是你’必须动手学习所以请允许我轻轻地教你关于中间件需要了解的知识 尽可能简单

建立我们的开发环境

如果您使用的是 Linux 或 Mac,请打开您的终端,如果您使用的是 Windows,请打开命令提示符

mkdir 中间件 && cd 中间件创建一个新目录并导航到它

npm init –y 使用默认设置初始化一个新的 npm 项目(稍后你可以使用 package.json,我将向你展示)

npm i express && npm i –save-dev nodemon 这将首先安装 express,因为我们需要它来构建我们的后端,然后我们将安装 nodemon 并将其保存为 dev 依赖项,因为我们实际上并不需要它生产环境

向 package.json 添加脚本

如果你打开你的 package.json 文件,你会发现一个名为 scripts 的部分,这个部分包含在终端中运行命令的“快捷方式”,它非常有用,所以让我们添加一个小脚本来运行 nodemon,看起来就像我们在太酷了

“dev”: “nodemon index.js” 在“test”脚本之后添加这个

要触发这些脚本,我们只需在终端输入 npm run 后跟脚本部分中定义的脚本名称,因此在我们的例子中,我们输入 npm run dev 但让我们稍后再使用它:)

无论如何,什么是中间件

中间件基本上是在路由处理函数之前执行的函数……。 ik 这不是那么简单所以让我们来看看一个非常基本的快递服务器

const express = require(“express”);const app = express();app.get(“”, (req, res) => res.send(“you’ve reached the home page”));app.get(“/users”, (req, res) => res.send(“this is the users page”));app.get(“/articles”, (req, res) => res.send(“this is the articles page”));app.get(“*”, (req, res) => res.status(404).send(“Page not found”));app.listen(3000, () => console.log(“up and running”));

好的,那里没有什么太花哨的吧?我们有三个路由 / , /users , /articles 并且我们为这些路由中的每一个都有路由处理函数

运行 npm run dev ,您应该会看到“启动并运行”的小消息

我们的中间件将在对这些路由的每个请求之前或在特定路由之前执行,因为我们可以选择指定

中间件基本上是一个可以访问请求和响应对象的功能,就像路由处理程序一样,它可以用来记录对我们服务器的每个请求或检查用户是否登录,验证和授权用户保护某些资源和许多其他目的

中间件 VS。路由处理程序

中间件和路由处理程序的最大区别是 next() 函数

next() 函数是中间件的第三个参数,它基本上告诉后端“继续下一个中间件”,或者换句话说“给它绿灯继续下一个例程”,所以我们的页面不只是冻结并且永远不会完成加载,因此如果我们忘记放置它,程序将无法继续,因为它卡在中间件中

中间件的类型

如上所述,我们有两种类型的中间件,一种在应用程序的顶层运行,因此它像中间件一样应用于所有路由处理程序,以检查用户是否登录,我们可以将其应用于所有帖子路由我们正在编写的一些社交媒体应用程序

默认 express 中间件的示例是 express.json() 中间件,我们一直在顶部使用它来启用接受和解析 json

另一种类型是在特定路由之前运行的中间件,也许您需要保护某些可以访问仅管理员文章或某些 VIP 内容访问权限的应用程序的路由

编写我们的第一个中间件

说了这么多,让我们看看如何编写我们自己的中间件,它会给我们一个美味的饼干

在我们的导入之后添加这个代码片段

const say_hi = (req, res, next) => { console.log(“have a yummy cookie “); next();}

为了在应用级别“启用”中间件,我们使用 express.use(say_hi); 并注意我们没有添加括号,因为我们没有调用函数

现在前往任何路线并检查您的终端是否有

你的 index.js 现在应该是这样的

const express = require(“express”); const app = express(); const say_hi = (req, res, next) => { console.log(“have a yummy cookie “); next();};app.use(say_hi); app.get(“”, (req, res) => res.send(“you’ve reached the home page”)); app.get(“/users”, (req, res) => res.send(“this is the users page”)); app.get(“/articles”, (req, res) => res.send(“this is the articles page”)); app.get(“*”, (req, res) => res.status(404).send(“Page not found”)); app.listen(3000, () => console.log(“up and running”));

为特定路线编写中间件

现在我们已经了解了如何编写一个在应用程序级别运行的中间件,也就是在每条路由之前运行,让我们再编写两个中间件,一个在用户路由之前运行,告诉我们“我爱我的用户”,另一个用于文章 上面写着“哇,看看所有这些文章”所以leggoooooo

const users_middleware = (req, res, next) => { console.log(“i love my users “); next();};const articles_middleware = (req, res, next) => { console.log(“wow look at all those articles “);};

现在,为了让我们专门为我们的路由使用这些路由,我们需要分别将每个路由作为路由处理函数的参数传递,所以它现在看起来像这样

const express = require(“express”);const app = express();const say_hi = (req, res, next) => { console.log(“have a yummy cookie “); next();};app.use(say_hi);const users_middleware = (req, res, next) => { console.log(“i love my users “); next();};const articles_middleware = (req, res, next) => { console.log(“wow look at all those articles “); next();};app.get(“”, (req, res) => res.send(“you’ve reached the home page”));app.get(“/users”, users_middleware, (req, res) => res.send(“this is the users page”));app.get(“/articles”, articles_middleware, (req, res) => res.send(“this is the articles page”));app.get(“*”, (req, res) => res.status(404).send(“Page not found”));app.listen(3000, () => console.log(“up and running”));

速记

  • 中间件只是一个函数,在服务器接收到请求之后,在路由句柄响应之前执行
  • 他们可以访问三个参数,req res 和第三个参数,这是一个方便地调用 next() 以允许下一个中间件运行的函数
  • 它们可以在应用程序级别,因此它们在对每个端点的每个请求之前运行,或者可以指定到某个路由

结论

中间件一开始对于那些刚开始表达的人来说可能是一个复杂的概念,但是一旦你发现它们的真正需求,它们就很容易实现,它们是一个强大的工具来调节你的服务器资源和访问控制 许多其他需求,因为您了解它们背后的基本思想

非常感谢你能做到这一点我感谢你的时间和对我博客的兴趣,我希望你喜欢你的白天/黑夜

关注七爪网,获取更多APP/小程序/网站源码资源!

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月19日
下一篇 2022年6月19日

相关推荐

  • 来自星空的幽白之光,OPPO K10月岩白图赏

    要说今年上半年发布的手机哪一台最吸睛,我想不同的人有不同的答案。但我相信,OPPO K10肯定能够在其中占据一席之地。该机自从发售以来就受到了来自用户和业界的好评,凭借的就是其独特…

    2022年7月2日
  • 怎样和招联协商还款呢 看完可以帮到你!

    在如今,如果使用招联好期贷后逾期,已经无法还清欠款,可以考虑申请协商还款,很多人对此的认识不多,那么怎样和招联协商还款呢?下文就来带大家了解一下。 招联好期贷协商还款,需要用户主动…

    2022年9月15日
  • 直播间提高人气的标题(新人开直播标题怎么写)

    在海量抖音视频中,不知道大家有没有关注过一些点赞量和评论量较高的视频,他的视频标题是怎么写的?如果一个抖音视频想要上热门走红,除了内容原创优质外,内容中所配的文案也是很重要的,同样…

    2022年11月8日
  • ffmpeg + cuda(cuvid) 硬解码+像素格式转换(cpu主导)实战

    注意: VAAPI 是inter gpu 提供的硬编解码接口VDPAU 是 video decode present api for unixnvdec / ncvid 都是niv…

    2022年6月23日
  • 移动互联网应用进一步与实体经济融合

    来源:人民网-人民日报 人民网研究院日前发布了《中国移动互联网发展报告(2022)》,总结了2021年中国移动互联网发展状况,分析了移动互联网的年度发展特点。 2021年是实施“十…

    2022年7月5日
  • 饿了么“免单1分钟”,数十万用户收到免单通知

    新京报讯(记者秦胜南)6月21日,不少消费者收到来自饿了么的免单通知。对此,饿了么在官方微博确认称“免单1分钟”活动于当日正式上线。 消费者收到了来自饿了么的免单通知,消息称“订单…

    2022年6月23日
  • 信用卡额度5000可以分期买10000的东西吗 答案来了

    信用卡的用户量一直在提升,不同的消费层次,不同年龄的用户都在列,不管吃饭还是买衣服或者买家电,人们都习惯性使用信用卡付款,那么信用卡额度5000可以分期买10000的东西吗?下面看…

    2022年9月29日
  • 国内5G手机品牌市占率,华为凭什么还是第一?

    由于众所周知的原因,华为手机已无缘5G有一段时间,但数据机构“每日互动”近日公布的一组数据却有些出人意料,在今年一季度5G手机品牌市占率的排行榜中,华为仍以23.1%的市占率继续领…

    2022年6月17日
  • 如何在Excel中自动录入时间数据?

    我是Excel大全。“4个函数,2组快捷键”这就分享给你! Excel中,可以录入静态时间,也可以录入动态时间。 静态时间,就是录入当前的时间和日期,一旦录入,时间就不会改变; 动…

    2022年4月14日
  • 《原神》5月用户规模约530万,31—35岁的用户占60%以上

    易观千帆(易观千帆 – 移动互联网产品竞争分析)数据显示,5月《原神》用户数约为533.07万,环比增长0.19%。对比之前的月度用户数涨幅,5月显然增势放缓。据了解,…

    2022年6月22日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息