ポート80でサーバーを起動し、xmlHTTPrequestを使おうとすると、次のようなエラーが発生します:Error: listen EADDRINUSE
。
なぜnodejsでは、80番ポートでサーバーを動かしているときにリクエストを行うと問題があるのでしょうか?Webブラウザでは問題ありません:サーバが動いている間でもネットサーフィンができます。
そのサーバーは
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort;
console.log('connection request from: ' + socket.remoteAddress);
socket.destroy();
}).listen(options.port);
そして、リクエストは
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
sys.puts("State: " + this.readyState);
if (this.readyState == 4) {
sys.puts("Complete.\nBody length: " + this.responseText.length);
sys.puts("Body:\n" + this.responseText);
}
};
xhr.open("GET", "http://mywebsite.com");
xhr.send();
EADDRINUSEは、
listen()`がサーバにバインドしようとするポート番号が既に使用されていることを意味します。
つまり、あなたの場合は、すでに80番ポートでサーバーが稼働しているはずです。
もし、このポートで別のウェブサーバを動かしているのであれば、そのサーバの後ろにnode.jsを置いて、それを介してプロキシする必要があります。
サーバーが本当にリッスンしているかどうかを確認するには、次のようにlistening
イベントをチェックする必要があります。
var http=require('http');
var server=http.createServer(function(req,res){
res.end('test');
});
server.on('listening',function(){
console.log('ok, server is running');
});
server.listen(80);