我试图解析节点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);
答案 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”中提供的建议来确定http
和https
。
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)