如何在ExpressJS中获取完整的URL
URL代表统一资源定位符。它用于在互联网上定位一些资源,可以将其视为网址。您在浏览器搜索栏中键入的字符串以从互联网获取某些内容是一个URL,因此在此过程中,浏览器会以某种方式找到与该网址关联的服务器地址,并说,嘿,这是我从用户那里得到的内容(一个URL),请告诉我如何响应。现在,服务器有责任根据该请求进行响应。在接收到响应后,浏览器有责任根据预期的方式向用户提供接收到的数据。
问题陈述: 那就是URL的基本信息,现在我们的问题陈述是如何在服务器上获取该URL?因为在应用程序的生产过程中,我们经常需要了解URL的全部组成部分,以了解用户的需求,以便服务器稍后能够通过发送适当的响应来满足这些需求。
方法: 有一种简单且简单的方法可以解决这个问题,因为直接或间接地用户发送请求对象,它包含服务器所需的足够信息。根据我们的需求,我们可以从该对象中提取必要的属性。在本文中,我们将在第4步讨论如何从用户发送的该请求对象中构建URL。
步骤1: 创建nodejs项目并安装软件包。
1. 创建一个 nodejs 应用程序。由于整个操作将使用express框架进行,因此创建一个node应用程序是第一个必要的步骤。
2. 这将要求你对项目进行一些配置,你可以根据情况填写它们,也可以后来在 package.json 文件中进行更改,你可以使用 **npm init -y**
进行默认初始化。
安装 express 框架
3. 创建一个新文件 app.js ,在这个文件中,我们将编写整个express代码。
项目结构: 它的结构将如下所示。
步骤2: 创建一个express应用。所以在 app.js 文件中进行以下操作:
- 使用require关键字导入express,
- 然后调用express框架提供的express()函数。
- 该函数调用将返回我们创建的app,并将其存储在一个const变量中。
- 为你的应用程序设置一个端口,3000是默认值,但你可以根据可用性选择任何其他端口。
- 然后,调用listen()函数,这样我们的express服务器就开始监听指定路径上的连接。
- listen函数以端口和回调函数作为参数。
提供作为参数的回调函数将在服务器成功启动或由于失败而提供错误时执行。
app.js
步骤3: 现在使用提供的命令运行服务器,检查是否一切正常。
如果是的,那么你将在终端收到类似于以下内容,否则,如果你的服务器没有启动,分析错误并检查语法等,然后重新启动服务器。
步骤4: 所以现在我们将继续创建路由并找到请求的完整URL,但是让我们首先了解URL的各个部分。以下是描述和显示URL结构的图像。
- scheme: 它是用于从Web访问资源的协议,可能是HTTP或HTTPS,其中’s’代表安全性,可以通过请求对象的.protocol属性提取该方案,如 req.protocol。
- host: 这是服务器所需的所有文件实际存在的位置的名称。可以通过从请求对象的.hostname属性中提取主机名,如 req.hostname。
- port: 这是服务器监听的端口号,可以直接从服务器中提取这个端口,在开始监听之前我们会指定它。
- path 此路径确定所访问文件、页面、资源的实际位置,实际上,您可以将其看作为子地址,可以通过连接 (req.baseUrl + req.path) 来提取它。
- query 这个查询用于在访问资源之前提供一些数据,以便服务器可以相应地做出响应,可以通过请求对象的 req.query 属性来提取它。
注意: 我们不需要单独访问baseUrl、path和query,express提供了一个叫做 req.originalUrl 的属性,其中包含主机名后的所有内容。
当您从主页点击算法部分时,上面的示例URL将出现在浏览器的搜索栏中
示例: 在本示例中,我们正在创建一个路由以接收用户请求。我们将使用以下方法:
- 在下面提供的路由中,我们为GET方法中的 ‘*’ 路径指定了一个函数。
- 这是因为我们现在可以将任何URL从浏览器发送以执行给定的功能。
- 然后,我们只需访问请求对象的一些属性 objectName.propertyName ,这是一种提取数据的方式之一。
- 我们提取了3个变量,分别是协议、主机名和原始URL。
- 在下一行,我们存储了之前设置的端口号。
- 随后,我们使用ES6的模板字面量创建了一个URL字符串,反引号 “ 是创建字符串模板的方式,我们可以在 ${} 中插入任何javascript表达式。
- 最后,函数 send() 仅将字符串作为响应返回。
app.js
运行该应用程序的步骤: 打开终端并输入以下命令。
输出:
解释: 当我们在浏览器的搜索栏中输入任何URL时,浏览器会向服务器发送一个请求对象,在我们的情况下,服务器是一个本地主机。Express在提供的路由中捕获所有用户请求,并在该路由的功能内部执行。从req.protocol中提取的方案 http ,从req.hostname中提取的主机名 localhost ,从PORT中访问 3000 (在运行服务器之前通过第3步设置),并从req.originalUrl中提取剩余的URL。