Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点JSURL解析_Javascript_Node.js_Express - Fatal编程技术网

Javascript 节点JSURL解析

Javascript 节点JSURL解析,javascript,node.js,express,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 hos

我正在尝试解析节点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);
不会在一个值中传递组合的URL,以供节点解析

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

GET/home HTTP/1.1
托管yourdomain.com
# ... (附加标题)
所以,这些碎片不会都在同一个地方

  • 您可以从中获得的路径和查询字符串,正如您刚才所做的那样–对于上面的示例,它将保留
    “/home”

    var pathname = url.parse(req.url).pathname;
    
  • 您可以从中获取的主机,尽管它并不总是需要值

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

    您可以使用“”中给出的建议来确定
    http
    https
    之间的关系

    var protocol = req.connection.encrypted ? 'https' : 'http';
    
    或者,尽管它不是标准的,但许多客户端/浏览器将为它提供
    X-Forwarded-Proto


req.url
仅包含路径,而不包含整个url。 其余的在请求头中

  • 对于主机:
    console.log(请求头[“主机])

  • 对于协议:
    console.log(请求头[“x-forwarded-proto]”)


您可以查看以下源代码:

您能给我们举一个URL不起作用的例子,并让您的控制台记录req.URL吗?HTTP协议不会在一个值中传递组合URL以供节点解析。
req.url
中只给出了路径和可选查询字符串(对于
GET/foo
请求,
req.url==“/foo”
)。主机
位于请求头中,至少在HTTP 1.1和更高版本中是这样。那么如何打印主机和协议呢?谢谢