处理请求时,如何在node.js中获取端口号?

处理请求时,如何在node.js中获取端口号?,node.js,Node.js,如果有两台node.js服务器在运行,我如何判断哪台服务器调用了processRequest函数 var http = require('http'); var https = require('https'); function processRequest(req, res) { res.writeHead(200); res.end("hello world, I'm on port: " + ???.port + "\n"); } var server1 = http.c

如果有两台node.js服务器在运行,我如何判断哪台服务器调用了processRequest函数

var http = require('http');
var https = require('https');
function processRequest(req, res) {
    res.writeHead(200);
    res.end("hello world, I'm on port: " + ???.port + "\n");
}
var server1 = http.createServer(processRequest).listen(80);
var server2 = https.createServer(processRequest).listen(443);

最初我想要端口号,但找不到对象/变量来给我。根据下面的答案,确定加密与非加密更有意义,因为关键是要知道请求来自哪个http服务器。

req参数是一个实例,您可以从中访问请求

从那里您可以访问localPort和remotePort

比如:

console.log(req.socket.localPort);
console.log(req.socket.remotePort);

您还可以检查服务器实例或连接对象,而不是检查端口号:

var http = require('http'),
    https = require('https');
function processRequest(req, res) {
  var isSSL = (req.socket.encrypted ? true : false);
  // alternate method:
  // var isSSL = (this instanceof https.Server);
  // or if you want to check against a specific server instance:
  // var isServer1 = (this === server1);

  res.writeHead(200);
  res.end('hello world, i am' + (!isSSL ? ' not' : '') + ' encrypted!\n');
}
var server1 = http.createServer(processRequest).listen(80);
var server2 = https.createServer(processRequest).listen(443);

通过这种方式可以获得端口号:

var http = require('http');
var server = http.createServer().listen(8080);

server.on('request', function(req, res){
    res.writeHead(200, {"Content-Type": "text/html; charset: UTF-8"});
    res.write("Hello from Node! ");
    res.write(" Server listening on port " + this.address().port);
    res.end();
});

如果您正在使用
http://localhost:
,然后可以使用
req.headers.host
属性获取端口号

例如:


但是Chris问如何确定端口号,而不是运行什么服务或使用什么协议。@jww是真的,但这是一个更好的解决方案,这就是我接受它的原因。端口号可以更改,但在这种情况下,加密与未加密始终是更好的测试。我应该把这个问题说得更清楚。不幸的是,
localPort
不适用于安全连接。它是
未定义的
。对于那些寻求解决方案的人,您可以结合Stratovarity的答案使用
req.socket.address()
req.socket.remoteAddress()
对我有效
const http = require('http');
const server = http.createServer((req, res)=>{
    console.log(req.headers.host); // localhost:8080
    console.log(req.headers.host.split(':')[1]); // 8080
})
server.listen(8080));