处理请求时,如何在node.js中获取端口号?
如果有两台node.js服务器在运行,我如何判断哪台服务器调用了processRequest函数处理请求时,如何在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
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));