2014-04-27 4 views
3

두 개의 node.js 서버가 실행중인 경우 어떤 서버가 processRequest 함수를 호출했는지 어떻게 알 수 있습니까?요청이 처리 될 때 node.js에서 포트 번호를 얻는 방법은 무엇입니까?

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 서버를 알아야하기 때문에 암호화 된 것과 암호화되지 않은 것을 결정하는 것이 더 합리적입니다.

답변

6

대신 포트 번호를 확인, 당신은 또한 서버 인스턴스 또는 연결 개체를 확인할 수 있습니다

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); 
+2

그러나 Chris는 어떤 서비스가 실행 중인지, 어떤 프로토콜이 사용되고 있는지에 관계없이 포트 번호를 결정하는 법을 물었다. – jww

+0

@jww 사실,하지만 이것이 내 상황에 대한 더 나은 해결책인데, 그래서 그것을 받아 들였습니다. 포트 번호는 변경 될 수 있지만 암호화되지 않은 암호화 된 vs는 항상이 경우 더 나은 테스트입니다. 나는 더 나은 질문을 했어야했다. – esnm

9

req 매개 변수는 IncomingMessage의 인스턴스이며 여기에서 socket에 액세스 할 수 있습니다.

거기에서 localPort 및 remotePort에 액세스 할 수 있습니다.

뭔가 같은 :

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

안타깝게도'localPort'는 보안 연결을 위해 작동하지 않습니다. 그것은'undefined '입니다. 해결책을 찾는 사람들에게는 stratovarious의 답과 함께 사용할 수 있습니다. 'req.socket.address()'와'req.socket.remoteAddress()'는 나를 위해 일했다. –

3

포트 번호 받기 방법 :

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(); 
}); 
관련 문제