如果我运行一个端口80的服务器,我尝试使用XMLHttpRequest,我得到这个错误

为什么NodeJS会有问题,如果我想做一个请求,而我在端口80上运行一个服务器?对于网络浏览器来说,这不是问题:我可以在服务器运行时上网。

服务器为:

  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();

当前回答

错误:listen EADDRINUSE表示要分配/绑定到应用服务器的端口已经在使用中。您可以为您的应用程序分配另一个端口。

或者如果你想给应用程序分配相同的端口。然后杀死在你想要的端口上运行的应用程序。

对于一个节点应用程序,你可以尝试的是,找到节点应用程序的进程id:

ps -aux | grep node

在获得进程id之后,执行

kill process_id

其他回答

在我的情况下,我使用一个虚拟主机,但它在本地主机是一样的,我使用:

ps -aef | grep 'node' 

对于节点进程的监视,控制台用PID显示进程。 要杀死进程,你必须使用这个命令:

kill -9 PID

其中PID是上面命令中的进程id。

当杀死NODE_PORT时,它可能会杀死你的chrome进程或任何侦听相同端口的东西,这很烦人。

这个shell脚本可能会有帮助——在我的例子中,端口是1337,但您可以随时更改它

# LOGIC

CHROME_PIDS=`pidof chrome`
PORT_PIDS=`lsof -t -i tcp:1337`

for pid in $PORT_PIDS
do

if [[ ${CHROME_PIDS} != *$pid* ]];then

    # NOT FOUND IN CHROME PIDS

    echo "Killing $pid..."
    ps -p "$pid"

    kill -kill "$pid"
    fi

done

sails lift
# OR 'node app' OR whatever that starts your node

exit

您的应用程序已经在端口8080上运行。 使用此代码杀死端口并再次运行您的代码

sudo lsof -t -i tcp:8080 | xargs kill -9

EADDRINUSE翻译过来就是“你试图发出app.listen()的端口正在被其他程序使用”。您可以使用这样的脚本来检查端口是否正在使用,然后在app.listen()中更改端口。

var net = require('net');
var errors = ['EADDRINUSE'];    
var isUsed = function(port) {
    var tester = net.createServer()
        .once('error', function (err) {
          if (!errors.includes(err.code)) {
           console.log("Port is in use, change the port.");
          }
        })
        .once('listening', function() {
            tester.once('close', function() { 
                console.log("You are good to go."); 
            })
            .close()
        })
        .listen(port);
}

您还可以在errors数组中添加其他错误,以检查所有类型的错误。

Sudo kill $(Sudo lsof -t:80)

对于武力杀伤

Sudo kill -9 $(Sudo lsof -t:80)

使用上述CMD杀死特定端口,然后运行您的服务器