📜  如何在 Express.js 中获取完整的 URL?(1)

📅  最后修改于: 2023-12-03 15:24:10.227000             🧑  作者: Mango

如何在 Express.js 中获取完整的 URL?

在 Express.js 中,有多种方式可以获取 URL。但有时候我们需要获取完整的 URL,包括查询参数和锚点信息。本文将介绍如何在 Express.js 中获取完整的 URL。

使用 req.url 属性

Express.js 中的请求对象 req 有一个名为 url 的属性,该属性返回请求的路径部分,但不包括查询参数和锚点信息。为了获取完整的 URL,需要使用 req.protocol 和 req.get 方法获取协议和主机名,并将其与 req.url 拼接起来,如下所示:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  const fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
  res.send(fullUrl);
});

app.listen(3000);

在上面的例子中,我们使用了 req.originalUrl 属性获取原始的请求路径,然后将其与协议和主机名拼接起来,得到完整的 URL。这种方式适用于所有 HTTP 方法,如 GET、POST、PUT、DELETE 等。

使用 req.url 和 req.query 属性

如果你只需要获取 URL 中的查询参数,可以使用 req.url 和 req.query 属性。req.url 返回的是路径和查询参数部分,不包括协议、主机名和锚点信息。req.query 是一个对象,包含所有的查询参数和对应的值。

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  const query = req.query;
  const url = req.url;
  res.send({query, url});
});

app.listen(3000);

在上面的例子中,我们返回了包含查询参数和 URL 的 JSON 对象。如果你向该应用发送 GET 请求,携带了查询参数 foo 和 bar,那么返回的 JSON 对象如下:

{
  "query": {
    "foo": "123",
    "bar": "abc"
  },
  "url": "/?foo=123&bar=abc"
}
使用 req.originalUrl 属性

除了上面提到的 req.url 属性,Express.js 还提供了另外一个属性 req.originalUrl,该属性返回原始的请求路径,包括查询参数和锚点信息。如果你只需要获取完整的 URL,可以使用它。

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  const fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
  res.send(fullUrl);
});

app.listen(3000);

请注意,req.originalUrl 返回的是一个字符串,而不是 URL 对象。如果你需要对 URL 进行解析,可以使用 Node.js 的 URL 模块。

总结

本文介绍了在 Express.js 中获取完整的 URL 的三种方式:使用 req.url 属性、使用 req.url 和 req.query 属性、以及使用 req.originalUrl 属性。这些方式可以满足不同的需求,你可以根据具体的情况选择适合你的方法。