http.Server
listen
является асинхронным, и вы не должны вызывать address()
, пока не будет отправлено событие listening
(из документов Don't call server.address() until the 'listening' event has been emitted.
).
Вы можете сделать это несколькими способами, подписавшись на обратный вызов listening
:
httpServer.on('listening', function () {
console.log(app.address().port)
})
Или просто с помощью app.listen
(который создает http.Server
) и проверкой порта экземпляра в обратном вызове, который listen
принимает:
let appInstance = app.listen(1337, function () {
console.log(`'Server listening at: ${appInstance.address().port}`)
})
Это устраняет необходимость в require
модуле http
и несколько упрощает код.
Методы set
/ get
в app
позволяют вам устанавливать и извлекать произвольные значения в экспресс-приложении. Некоторые из этих значений являются «особыми» (см. документы ) и влияют на поведение приложения, но ничто не мешает вам установить свойство, такое как port
; проблема в том, что он на самом деле не изменит port
, который слушает приложение.