📜  如何在 ExpressJS 中获取完整的 URL?

📅  最后修改于: 2022-05-13 01:56:21.253000             🧑  作者: Mango

如何在 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中执行以下操作:

  1. 使用 require 关键字导入 express 和,
  2. 然后调用 express 框架提供的 express()函数。
  3. 该函数调用将返回我们创建的应用程序,将其存储在 const 变量中。
  4. 为您的应用程序设置一个端口 3000 是默认值,但您可以根据可用性选择任何其他端口。
  5. 之后,调用listen()函数,我们的express服务器开始监听指定路径上的连接。
  6. 监听函数将端口和回调函数作为参数。

作为参数提供的回调函数要么在服务器成功启动时执行,要么由于失败而提供错误。

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 结构的描述和图像。

  1. scheme:用于从web访问资源的协议,可以是HTTP或HTTPS,其中's'代表安全,这个scheme可以通过req.protocol等request对象的.protocol属性提取
  2. host:这是服务器所需的所有文件在现实中存在的地方的名称。主机的名称可以从请求对象(如req.hostname)的 .hostname 属性中提取。
  3. port:是服务器正在监听的端口号,这个端口可以直接在服务器中提取,因为我们在开始监听之前指定了它。
  4. path这个路径决定了被访问的文件、页面、资源的实际位置,实际上你可以把它看成是一个子地址,可以通过(req.baseUrl + req.path)的串联来提取。
  5. 查询该查询用于在访问资源之前提供一些数据,以便服务器可以做出相应的响应,可以通过请求对象的req.query属性提取。

注意:我们不必分别访问 baseUrl、路径和查询,express 为我们提供了一个名为req.originalUrl的属性,其中包含主机名之后的所有内容。

当您单击geeksforgeeks.org主页上的算法部分时,我们显示的上述示例 URL 将出现在您浏览器的搜索栏中

示例:在此示例中,我们正在创建一个接收用户请求的路由。我们将使用以下方法:

  1. 在下面提供的路线中,我们指定了一个函数 GET 方法的“*”路径。
  2. 那是因为现在我们可以从浏览器发送任何 URL 来执行给定的功能。
  3. 之后我们只是简单地访问请求对象的一些属性, objectName.propertyName这是提取数据的方法之一。
  4. 我们提取了 3 个变量作为协议、主机名和原始 URL。
  5. 在下一行中,我们存储了我们之前设置的端口号。
  6. 后来,我们用 ES6 的模板字面量创建了一个 URL字符串,反引号是创建字符串模板的方式,我们可以在${}中注入任何 javascript 表达式。
  7. 最后,函数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 中提取的。