关于nodejs server.listen()

5

我刚开始学习nodejs服务器和websocket。我的问题是,我使用socket.io和express编写了一个JavaScript服务器。

var app = require('express')(),
    server = require('http').Server(app),
    io = require('socket.io')(server),
    port = process.env.PORT || 8080;

这两者有什么不同吗:

server.listen(port, function(){
    console.log("listening port " + port);
});

并且

server.listen(port);
console.log("listening port " + port);

显然它们的工作方式相同。

那么server.listen()实际上是做什么的?


第一个例子有回调函数,而另一个没有。 - Vicky Gonsalves
这是JavaScript函数的一般属性吗? - AeonZh
1个回答

5
根据 server.listen 文档

这个函数是异步的。当服务器被绑定后,将会触发 'listening' 事件。

它使用回调函数,因为回调函数内部的日志语句是确认端口已被绑定的标志。

显然它们的工作方式是相同的。

不正确。如果在回调函数外部记录日志,那么它仍然会记录端口号,但这是在实际端口绑定并行进行的,你不知道它是否成功。


1
那么在第二种情况下,即使它实际上没有在侦听,它也会显示控制台日志吗? - AeonZh
1
@AeonZh 是的,这是真的,它可能会在服务器开始监听之前显示控制台日志。举个更熟悉的 Promise 领域的例子,当调用控制台日志时,您不会期望下面的 result 变量包含结果。let result; fetch('www.google.com').then(response => { result = response; }); console.log('the response is ' + response'); - Liam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接