当前位置: 首页 > 后端技术 > Node.js

出门吃饭了解Express.js基础

时间:2023-04-04 00:03:43 Node.js

原文:出门吃饭了解Express.js基础译者:neal1991欢迎star我的文章-译者,为您提供文章进阶翻译。任何建议,请发布或联系我许可证:麻省理工学院如果你曾经去过坐下来的餐厅,你就会了解Express的基础知识。但是,如果您刚刚开始构建您的第一个Node.js后端……您可能进展得不太顺利。是的-如果您以前有JavaScript经验,学习Node肯定会更容易。但是,构建后端时面临的挑战与在前端使用JavaScript时面临的挑战大不相同。当我学习Node时,我选择了艰难的道路。我一遍又一遍地研究电子书、编写教程和视频,直到我终于明白我为什么要做我正在做的事情。有一个更简单的方法。我将使用餐厅类比来解释您的第一个应用程序的四个关键部分。Express.js是一种用于组织代码的流行框架,我会向所有初学者推荐它。我稍后会进一步解释。以下是我们将涵盖的四个关键部分:require语句MiddlewareRoutingApp.listen()/启动服务器在这个类比中,您是一家餐厅老板,希望聘请一位总经理-创建所有流程并管理它们,以便餐厅它会顺利运行,客户会很高兴。这是即将发生的事情的预览:到最后,您将了解基本Express应用程序的每个部分的作用。第1步:雇用一名经理(需要声明)在本例中,您是餐厅老板。您还需要聘请专家来管理新餐厅的日常运营。你肯定不是专家,也不能交给服务员和厨房去想办法。如果您想经营一家高效、安全的餐厅,您需要有人让您的员工以最高效率工作。快递是新经理。第一部分非常简单。与其他NPM包一样,您需要使用npm安装express模块,然后使用require语句加载该模块。与许多其他NPM包不同,您还需要使用这一行:constapp=express();这是因为您需要一个变量来保存您的新Express应用程序。Express不是Node.js的默认部分。第二步:在餐厅做出决定(中间件)让我们暂时停在这里。餐厅最常见的套路是什么?我们立即想到了三个:为新客户安排座位接受食物订单用餐结束时确认对于每个例行程序,都需要一系列流程来执行该操作。例如,在为顾客安排座位之前,您需要知道:他们是否穿着衬衫和鞋子(和裤子)?否则,他们无法入座。如果他们想坐在酒吧里,他们已经21岁了吗(如果您在美国)这不是海滩酒吧!此外,在您的代码中,您需要在继续之前验证请求是否具有特定条件。例如,如果有人试图登录您的站点:他们有帐户吗?他们是否输入了正确的密码?这就是中间件概念的用武之地。中间件功能允许您处理任何传入的请求并在发送回响应之前修改响应。在您的餐厅中,您需要一套规则来确定您是否应该接待访客。假设一对夫妇走进您的餐厅。在你给他们一张桌子之前,你有一个规则:他们是否穿着衬衫和鞋子?首先,您从app.use()开始。这意味着这些只是下一条路由需要应用的规则。它们不是GET、POST、PUT或DELETE。在第四行,你有一个带有参数req、res和next的匿名函数。出于此代码块的目的,您只是检查请求(req)以查看它是否有衬衫和鞋子。您还需要在最后使用next()函数,因为您只是在此处验证服装。稍后,在路线中,您将允许客人获得实际的桌子。在第五和第六行,您检查他们是否有衬衫和鞋子。在第7-9行中,只有两者的组合才有效。上面的代码块缺少一件重要的事情:路径。这是请求中包含的特定字符串。由于缺少路径,它将在每次请求时运行。你可以想象?当顾客进入餐厅时...点菜...要求结账...工作人员将被迫上下检查他们以确保他们穿好衣服!这是一种快速退出业务的方法。因此,我们更改上面示例中的第4行。现在,我们只会在用户请求“/table”路径时运行这段代码。完整说明:第3步:执行公共例程(路由)让我们继续坐着的例子。到目前为止,我们只知道如何验证是否有人应该这样做。但我们实际上并不知道如何引导他们到一张桌子坐下。这就是路由的用武之地。路由允许我们根据路径编写特定的操作。选项有GET、POST、PUT和DELETE,但现在我们将重点关注GET和POST。在餐厅的上下文中,我们需要创建一个GET请求以选择特定的餐桌并安排客人。GET不会修改或向您的数据库添加新数据。他们只是根据特定参数检索信息。在这种情况下,假设您需要创建一个程序来安排两方。No.2来自客户的要求。好的,在我解释之前:是的,这只是在最后发送消息。实际上还没有找到特定的桌子来容纳顾客。我需要在数组中搜索一个打开的表单,这涉及更多的背景故事……这超出了本教程的范围。在第12行,我们定义了客人请求'table'路由时的查表过程。就像上面的中间件示例一样,我们有可用的请求和响应参数。它还有一个参数,数量。在这个例子中,那是两个。事实上,第12行函数声明之后的所有内容在技术上都是中间件,因为它修改了用户请求。您将在图片中看到结尾。在第13行,我们从请求对象的参数中获取聚会人数。由于请求来自用户,它没有在任何地方声明,我们也没有任何前端代码。因此,如果这是一个真实的应用程序,请求可能如下所示:req={params:{amount:2;}}在第13行,我们的party变量访问请求中params对象的amount属性。最后在第14行,我们将响应发送给客户端:我们正在寻找合适的表。一下子就这么多了。下图:步骤3.5:使您的餐厅高效(路由)现在您可以跟踪从请求到响应的完整路径。然而,随着您的应用程序规模的增长,您将不希望为每个路由单独编码规则。您会发现某些路由共享相同的规则,因此您需要找到一种方法将一组规则应用于多条路由。就座位而言,您可以让顾客坐在吧台或餐桌旁。他们对衬衫和鞋子有共同的规定,但坐在吧台要求每个人都年满21岁。而且,在为客户提供服务时,您需要使用略有不同的程序来提供开胃菜、主菜和晚餐。不过,这三条路线也有很多共同点。这就是路由器的用武之地。路由器让您可以对路由进行分组,以便创建通用规则。我们需要创建中间件来涵盖这些情况。现在我将重写上面的代码,考虑到上面的座位情况。这是完整的代码片段:我们的路由器。在第6行和第14行,我们现在使用seatingRouter.use()而不是app.use()来指示此中间件仅与seatRouter路由相关。最后,在第21行,我们添加了一些中间件来显示每个座位路由器都以“/seating”开头。所以,如果有人在酒吧要个座位,完整路径是“/seating/bar”,这可能有点不合理,因为您可能希望在第4行创建路由器时定义路径。这是普通的!这是图表形式:当您添加GET路由时,它将转到您在上面分配的路由。第四步:开启业务(端口)好了,最后一部分。到目前为止,您已经聘请了一名经理,定义了在接受客户请求之前要做什么,并确定了如何处理特定的客户请求。现在,您所要做的就是确定所需位置的地址。您的服务器端口有点像餐厅本身的地址。由于您的服务器可以同时处理多种类型的餐厅(或服务器端脚本),因此您需要告诉每个脚本应该在哪里运行。在上面的示例中,端口是3000,它位于您的计算机上。因此,如果您在浏览器中键入:https://localhost:3000/,并且您正在运行Node应用程序,服务器就会知道要运行特定的脚本。在这种情况下,只要您输入URL,您就会在控制台中记录一条消息,并且能够使用任何路由。如果餐厅本身是您的电子商务应用程序,它现在在地址3000处打开。您喜欢这个教程吗?喜欢它,以便其他人也可以发现它。