从request获取完整的请求路径的Nodejs问题

从request获取完整的请求路径的Nodejs问题

//router

exports.doSomething = function(req, res){ var protocol = req.protocol; var host = req.host; var path = req.path; //可是没有端口 var port = …?

//拼接
var url = protocol + "://" + host + port + path;

}


5 回复

当然可以。以下是关于如何从 request 对象中获取完整请求路径的 Node.js 示例代码及其解释。

标题:从 request 获取完整的请求路径的 Node.js 问题

内容:

// router.js
exports.doSomething = function(req, res) {
    // 获取协议(http 或 https)
    var protocol = req.protocol;

    // 获取主机名
    var host = req.get('host');

    // 获取路径
    var path = req.path;

    // 获取端口号(如果有的话)
    var port = req.socket.localPort || (protocol === 'https' ? 443 : 80);

    // 拼接完整的请求 URL
    var url = `${protocol}://${host}:${port}${path}`;

    // 返回结果给客户端
    res.json({ fullUrl: url });
};

解释:

  1. 协议 (req.protocol):

    • req.protocol 会返回请求使用的协议,通常是 httphttps
  2. 主机名 (req.get('host')):

    • req.get('host') 方法用于获取请求头中的 Host 字段,该字段包含了客户端请求时所用的主机名及端口号。
  3. 路径 (req.path):

    • req.path 返回请求的路径部分,不包括查询字符串或锚点。
  4. 端口号 (req.socket.localPort 或默认端口):

    • req.socket.localPort 可以获取当前服务器监听的端口号。
    • 如果使用的是 HTTPS 协议,默认端口是 443;如果是 HTTP 协议,默认端口是 80。
  5. 拼接完整的 URL:

    • 使用模板字符串将这些部分拼接成一个完整的 URL 字符串。

通过这种方式,你可以从 request 对象中获取完整的请求路径,并将其作为 JSON 响应返回给客户端。这样可以确保你的应用能够正确地处理和响应客户端的请求。


port怎么获取呢?

port是你自己定义的啊!全局变量不就行了么

注意 req.headers.host 有包含port

为了获取完整的请求路径(包括协议、主机名、端口号和路径),你可以使用 req 对象提供的属性来拼接 URL。以下是完整的示例代码:

exports.doSomething = function(req, res) {
    var protocol = req.protocol; // 获取协议 (http 或 https)
    var host = req.get('host'); // 获取主机名和端口号
    var path = req.originalUrl; // 获取完整的请求路径

    // 拼接完整的 URL
    var url = `${protocol}://${host}${path}`;

    console.log(url); // 输出完整的请求路径
    res.send(`Full request URL: ${url}`);
};

解释:

  1. req.protocol: 获取请求使用的协议(例如 “http” 或 “https”)。
  2. req.get('host'): 获取客户端发送的完整主机名和端口号。这会包含端口号(如果有)。
  3. req.originalUrl: 获取请求的原始路径,包括查询字符串。

通过将这些部分组合起来,可以得到一个完整的请求 URL。这样就不需要单独处理端口号了。

回到顶部