Адрес и порт сервера в nodejs и экспресс с использованием http.createServer - PullRequest
0 голосов
/ 04 июля 2018

новый для узла и экспресс. Нужно знать, как получить IP сервера и порт. Пробовал несколько вещей:

const express = require('express'); 
const app = express(); 
var http = require('http'); 
app.set('port',12346); 
var httpServer = http.createServer(app).listen(app.get('port'));  
function getMethod(req,res) {
    console.log("Server Port is: "+ app.get('port'));
    // console.log("Server Port is: "+ httpServer.address);
    console.log("Connection Type: "+ req.protocol);
    res.send("Hello world!"); 
} 
app.get('/', getMethod);

В приведенном выше коде app.get возвращает мне порт сервера, но если я запрашиваю httpServer.address, он возвращает undefined, а app.address (). Port возвращает ошибку.
Есть ли способ получить его, не устанавливая его в приложении?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Попробуйте:

console.log('Port :' + httpServer.address().port);
console.log('Server:' + httpServer.address().address);
0 голосов
/ 04 июля 2018

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, который слушает приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...