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 回复
解决了:
用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);