win7下Nodejs得不到完整req.url
发布于 1年前 作者 yunfengcao 1449 次浏览

1、最简单的例子代码 test.js:

var http = require('http');
var url = require('url');
http.createServer(function (req, res) {
    console.log(req.url);
    console.dir(url.parse(req.url));
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1234);
console.log('Server running at http://127.0.0.1:1234/');

2、在你的Win7安装路径下找到hosts(例如:C:\Windows\System32\drivers\etc\hosts),加入以下两行:

127.0.0.1 mysite1.mydomain
127.0.0.1 mysite2.mydomain

3、运行test.js

node test.js

4、在浏览器中尝试以下url:

http://mysite1.mydomain:1234/mypath
http://mysite2.mydomain:1234/mypath
http://127.0.0.1:1234/mypath

你会发现,3个url都可以得到响应,但console中输出的hostname、port、protocol全都是null。
为什么呀?! 在WinXP下没这问题呀! 有别人遇到同样问题吗? 有什么设置可以解决吗?

3 回复

貌似不是req.url orginalUrl好像叫这个

解决了:
用Node本身的 req.headers.host 或者 Express提供的 req.host, req.protocol 可以得到有意义的值。
req.url 和 req.orginalUrl 都不包含protocol、hostname、port,Win7下与WinXP下是一样的。

// req.headers.host: mysite1.mydomain:1234
console.log('req.headers.host:%s', req.headers.host); 

// req.protocol: http, req.host: mysite1.mydomain, req.subdomains: console.log('req.protocol:%s, req.host:%s, req.subdomains:%s’, req.protocol, req.host, req.subdomains);

// req.originalUrl: /mypath, req.url: /mypath console.log('req.originalUrl:%s, req.url:%s’,req.originalUrl, req.url);

本来req.url里就不会有你要的那些信息,自己去读读HTTP协议规范就知道了,req.url其实不是你想象的url

回到顶部