如何在 ExpressJS 中获取完整的 URL?
URL 代表统一资源定位器。它用于在 Internet 上查找某些资源,可以将其视为网址。您在浏览器搜索栏中输入的从 Internet 获取内容的字符串是一个 URL,因此在此过程中,浏览器会以某种方式找到与该 Web 地址关联的服务器地址并说嘿,这是内容(一个 URL)我已经从用户那里得到了,现在告诉我应该如何回应。现在由服务器负责根据该请求进行响应。在收到响应后,浏览器有责任以预期的方式将收到的数据提供给用户。
问题陈述:所以这几乎是关于 URL,现在我们的问题陈述是如何在服务器上获取该 URL?因为在生产中的应用程序中,我们多次需要 URL 的 Whole 组件来了解用户的需求,以便以后的服务器可以通过发送适当的响应来满足它们。
方法:有一个简单的方法可以解决这个问题,因为用户直接或间接地发送请求对象,并且它包含足够的信息供服务器使用。我们可以根据需要从该对象中提取基本属性。在本文的第 4 步中,我们将讨论如何从用户发送的请求对象构造 URL。
第 1 步:创建 nodejs 项目并安装包。
1.创建一个nodejs应用程序。由于整个操作将使用 express 框架进行,因此创建节点应用程序是第一个强制性步骤。
npm init
2. 这将要求您对项目进行一些配置,您可以相应地填写它们,您也可以稍后从 package.json 文件中更改它,您可以使用` npm init -y`进行默认初始化。
安装express框架
npm install express
3.新建一个文件app.js,在这个文件里面,我们会写完整的express代码。
项目结构:它将如下所示。
第 2 步:创建一个快速应用程序。所以在app.js中执行以下操作:
- 使用 require 关键字导入 express 和,
- 然后调用 express 框架提供的 express()函数。
- 该函数调用将返回我们创建的应用程序,将其存储在 const 变量中。
- 为您的应用程序设置一个端口 3000 是默认值,但您可以根据可用性选择任何其他端口。
- 之后,调用listen()函数,我们的express服务器开始监听指定路径上的连接。
- 监听函数将端口和回调函数作为参数。
作为参数提供的回调函数要么在服务器成功启动时执行,要么由于失败而提供错误。
app.js
const express = require('express'); // Import
const app = express(); // Create
const PORT = 3000; // Configure
// Do your task here, in this space.
app.listen(PORT, (error) => { // Listen
if(!error)
console.log("Server is Successfully Running,
and App is listening on port "+ PORT)
else
console.log("Error occured, server can't start", error);
}
);
app.js
app.get('*', function (req, res) {
const protocol = req.protocol;
const host = req.hostname;
const url = req.originalUrl;
const port = process.env.PORT || PORT;
const fullUrl = `${protocol}://${host}:${port}${url}`
const responseString = `Full URL is: ${fullUrl}`;
res.send(responseString);
})
第 3 步:现在使用提供的命令运行服务器以检查一切是否正常。
node app.js
如果是,那么您将在终端中收到类似的信息,否则,如果您的服务器未启动,请分析错误并检查语法等,然后重新启动服务器。
第 4 步:所以现在我们将继续创建路由并查找请求的完整 URL,但让我们首先了解 URL 的各个部分。下面是显示 URL 结构的描述和图像。
- scheme:用于从web访问资源的协议,可以是HTTP或HTTPS,其中's'代表安全,这个scheme可以通过req.protocol等request对象的.protocol属性提取。
- host:这是服务器所需的所有文件在现实中存在的地方的名称。主机的名称可以从请求对象(如req.hostname)的 .hostname 属性中提取。
- port:是服务器正在监听的端口号,这个端口可以直接在服务器中提取,因为我们在开始监听之前指定了它。
- path这个路径决定了被访问的文件、页面、资源的实际位置,实际上你可以把它看成是一个子地址,可以通过(req.baseUrl + req.path)的串联来提取。
- 查询该查询用于在访问资源之前提供一些数据,以便服务器可以做出相应的响应,可以通过请求对象的req.query属性提取。
注意:我们不必分别访问 baseUrl、路径和查询,express 为我们提供了一个名为req.originalUrl的属性,其中包含主机名之后的所有内容。
当您单击geeksforgeeks.org主页上的算法部分时,我们显示的上述示例 URL 将出现在您浏览器的搜索栏中
示例:在此示例中,我们正在创建一个接收用户请求的路由。我们将使用以下方法:
- 在下面提供的路线中,我们指定了一个函数 GET 方法的“*”路径。
- 那是因为现在我们可以从浏览器发送任何 URL 来执行给定的功能。
- 之后我们只是简单地访问请求对象的一些属性, objectName.propertyName这是提取数据的方法之一。
- 我们提取了 3 个变量作为协议、主机名和原始 URL。
- 在下一行中,我们存储了我们之前设置的端口号。
- 后来,我们用 ES6 的模板字面量创建了一个 URL字符串,反引号“是创建字符串模板的方式,我们可以在${}中注入任何 javascript 表达式。
- 最后,函数send()只是简单地将字符串作为响应返回。
应用程序.js
app.get('*', function (req, res) {
const protocol = req.protocol;
const host = req.hostname;
const url = req.originalUrl;
const port = process.env.PORT || PORT;
const fullUrl = `${protocol}://${host}:${port}${url}`
const responseString = `Full URL is: ${fullUrl}`;
res.send(responseString);
})
运行应用程序的步骤:打开终端并键入以下命令。
node app.js
输出:
说明:当我们在浏览器搜索栏中输入任何 Url 时,浏览器会向服务器发送一个请求对象,在我们的例子中,服务器是一个 localhost。 Express 在提供的路由和该路由的功能内捕获所有用户请求。方案http从 req.protocol 中提取,主机名localhost是从 req.hostname 中提取的, 3000是从我们在步骤 3 中运行服务器之前设置的 PORT 访问的,剩余的 URL 是从 req.originalUrl 中提取的。