在 Express.js 中如何获取请求来源的域名?

阅读时长 3 分钟读完

在开发 Web 应用程序时,我们经常需要获取请求的来源域名以进行一些操作。例如,您可能希望对特定的域名启用 CORS(跨域资源共享)规则,或者根据请求来源的域名提供不同的响应。

在 Express.js 中,可以通过 req.headers.refererreq.headers.origin 属性获取请求的来源 URL,但这些属性并不能直接返回域名信息。因此,我们需要进行一些额外的处理来提取域名信息。

以下是几种方法来获取请求来源的域名:

方法 1:使用 url 模块

通过使用 Node.js 内置的 url 模块,我们可以轻松地从 referer 或 origin 属性中提取出域名信息。代码示例如下:

-- -------------------- ---- -------
----- --- - ---------------

------------ ----- ---- -- -
  ----- ------ - ------------------ -- --------------------
  -- -------- -
    ----- --------- - --- ------------
    --------------------------------
    -- -- --------- ---- --- --------
  - ---- -
    -- ------ ---- ----- ------ -- --- --------
  -
---

在上述代码中,我们首先检查 originreferer 头部是否存在,并将其存储在 origin 变量中。然后,我们使用 new URL() 方法将 URL 字符串转换为 URL 对象,并从中提取出 hostname 属性,即域名信息。

方法 2:使用正则表达式

如果您不想依赖 url 模块,也可以使用正则表达式来提取域名信息。代码示例如下:

-- -------------------- ---- -------
------------ ----- ---- -- -
  ----- ------ - ------------------ -- --------------------
  -- -------- -
    ----- ----- - -----------------------------------------------------------------------
    -- ------- -
      ----------------------
      -- -- --------- ---- --- --------
    - ---- -
      -- ------ ---- ----- ----- ---- --- -----
    -
  - ---- -
    -- ------ ---- ----- ------ -- --- --------
  -
---

在上述代码中,我们首先检查 originreferer 头部是否存在,并将其存储在 origin 变量中。然后,我们使用正则表达式来提取出域名信息,并存储在 match 数组中。最后,我们通过访问 match[1] 来获取域名信息。

总结

在 Express.js 中获取请求来源的域名,有多种方法可供选择。无论您是使用 Node.js 内置的 url 模块还是自己编写正则表达式来提取域名信息,都需要注意处理可能出现的异常情况。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/25928

纠错
反馈