node js URL解析

时间:2016-04-13 04:08:11

标签: javascript node.js express

我试图解析节点js中的url。从此代码中获取空值。它正在接收路径的价值。但不适用于主机或协议。

var http = require('http');
var url = require('url');
http.createServer ( function (req,res){
    var pathname = url.parse(req.url).pathname;
    var protocol = url.parse(req.url).protocol;
    var host = url.parse(req.url).host;
    console.log("request for " + pathname + " recived.");
    console.log("request for " + protocol + " recived.");
    console.log("request for " + host + " recived.");
    res.writeHead(200,{'Content-Type' : 'text/plain'});
    res.write('Hello Client');
    res.end();
 }).listen(41742);
 console.log('Server Running at port 41742');
 console.log('Process IS :',process.pid);

3 个答案:

答案 0 :(得分:2)

HTTP protocol不会将一个值中的组合网址传递给Node进行解析。

例如,http://yourdomain.com/home的请求到达:

GET /home HTTP/1.1
Host yourdomain.com
# ... (additional headers)

所以,这些作品并不都在同一个地方。

  • 您可以从req.url获取路径和查询字符串,就像您正在执行的那样 - 它将为上述示例保留"/home"

    var pathname = url.parse(req.url).pathname;
    
  • 您可以从req.headers获取主持人,但并不总是需要该值。

    var hostname = req.headers.host || 'your-domain.com';
    
  • 对于协议,此值没有标准展示位置。

    您可以使用“How to know if a request is http or https in node.js”中提供的建议来确定httphttps

    var protocol = req.connection.encrypted ? 'https' : 'http';
    

    或者,虽然它不是标准的,但许多客户端/浏览器会为其提供X-Forwarded-Proto标题。

答案 1 :(得分:1)

req.url仅包含不是整个网址的路径。 休息在请求标题中。

  • 主持人:console.log(req.headers["host"]);

  • 对于协议:console.log(req.headers["x-forwarded-proto"]);

答案 2 :(得分:1)