在开发 Web 应用程序时,我们经常需要获取请求的来源域名以进行一些操作。例如,您可能希望对特定的域名启用 CORS(跨域资源共享)规则,或者根据请求来源的域名提供不同的响应。
在 Express.js 中,可以通过 req.headers.referer
或 req.headers.origin
属性获取请求的来源 URL,但这些属性并不能直接返回域名信息。因此,我们需要进行一些额外的处理来提取域名信息。
以下是几种方法来获取请求来源的域名:
方法 1:使用 url 模块
通过使用 Node.js 内置的 url
模块,我们可以轻松地从 referer 或 origin 属性中提取出域名信息。代码示例如下:
-- -------------------- ---- ------- ----- --- - --------------- ------------ ----- ---- -- - ----- ------ - ------------------ -- -------------------- -- -------- - ----- --------- - --- ------------ -------------------------------- -- -- --------- ---- --- -------- - ---- - -- ------ ---- ----- ------ -- --- -------- - ---
在上述代码中,我们首先检查 origin
和 referer
头部是否存在,并将其存储在 origin
变量中。然后,我们使用 new URL()
方法将 URL 字符串转换为 URL 对象,并从中提取出 hostname
属性,即域名信息。
方法 2:使用正则表达式
如果您不想依赖 url
模块,也可以使用正则表达式来提取域名信息。代码示例如下:
-- -------------------- ---- ------- ------------ ----- ---- -- - ----- ------ - ------------------ -- -------------------- -- -------- - ----- ----- - ----------------------------------------------------------------------- -- ------- - ---------------------- -- -- --------- ---- --- -------- - ---- - -- ------ ---- ----- ----- ---- --- ----- - - ---- - -- ------ ---- ----- ------ -- --- -------- - ---
在上述代码中,我们首先检查 origin
和 referer
头部是否存在,并将其存储在 origin
变量中。然后,我们使用正则表达式来提取出域名信息,并存储在 match
数组中。最后,我们通过访问 match[1]
来获取域名信息。
总结
在 Express.js 中获取请求来源的域名,有多种方法可供选择。无论您是使用 Node.js 内置的 url
模块还是自己编写正则表达式来提取域名信息,都需要注意处理可能出现的异常情况。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/25928