Node.js中的服务器地址和端口,并使用http.createServer表示

时间:2018-07-04 12:03:00

标签: node.js express

是节点的新内容并表示。需要知道如何获取服务器的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,它将返回未定义,而app.address()。port返回一个错误。
有没有在应用程序中未设置就可以获取它的方法?

2 个答案:

答案 0 :(得分:0)

http.Server's 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方法允许您在快速应用程序上设置和检索任意值。其中一些值是“特殊的”(请参见docs)并影响应用程序的行为,但是并没有阻止您设置诸如port之类的属性的情况;问题在于它实际上不会更改应用程序侦听的port

答案 1 :(得分:0)

尝试:

console.log('Port :' + httpServer.address().port);
console.log('Server:' + httpServer.address().address);