nodejs server.address()方法在'listening'事件发出之前返回结果

时间:2017-07-21 12:48:55

标签: javascript node.js

如果您想在Node中启动服务器时获取地址(主机和端口)信息,您可能会这样做:

const server = http.createServer()
server.listen(() => {
  console.log(`Running on port: ${server.address().port}`)
})

Doc还说只有在'listen'事件被发出之前才应该调用server.address()

但如果你试试这个:

const server = http.createServer()
server.listen()
console.log(server.address())

它仍然会记录实际地址而不是null,为什么?

2 个答案:

答案 0 :(得分:0)

根据server.listen()

doc
  

此功能是异步的。服务器绑定后,将发出“listen”事件。

所以

const server = http.createServer()
server.listen()
console.log(server.address())

仍然记录实际地址。

答案 1 :(得分:0)

server.listen()方法是异步的,在您调用console.log(server.address())时可能无法完全设置所有内容(与第二个示例一样)。

您的第二个示例是在执行时记录实际地址(null),因为它在服务器完成设置之前被调用。这就是为什么你能够提供一个回调方法作为参数

server.listen(() => {
    console.log('Running on port: ${server.address().port}');
});

这允许您执行任何类型的操作,这些操作要求服务器在保证服务器启动并正在侦听之后执行侦听。