1、最简单的例子代码 test.js: <pre> 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/’); </pre>
2、在你的Win7安装路径下找到hosts(例如:C:\Windows\System32\drivers\etc\hosts),加入以下两行: <pre> 127.0.0.1 mysite1.mydomain 127.0.0.1 mysite2.mydomain </pre>
3、运行test.js <pre> node test.js </pre>
4、在浏览器中尝试以下url: <pre> http://mysite1.mydomain:1234/mypath http://mysite2.mydomain:1234/mypath http://127.0.0.1:1234/mypath </pre>
你会发现,3个url都可以得到响应,但console中输出的hostname、port、protocol全都是null。</br> 为什么呀?! 在WinXP下没这问题呀! 有别人遇到同样问题吗? 有什么设置可以解决吗?
貌似不是req.url orginalUrl好像叫这个
解决了:<br/> 用Node本身的 req.headers.host 或者 Express提供的 req.host, req.protocol 可以得到有意义的值。<br/> req.url 和 req.orginalUrl 都不包含protocol、hostname、port,Win7下与WinXP下是一样的。<br/> <pre> // 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); </pre>
本来req.url里就不会有你要的那些信息,自己去读读HTTP协议规范就知道了,req.url其实不是你想象的url