如果我有两个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);
Run Code Online (Sandbox Code Playgroud)
最初我想要端口号,但找不到对象/变量给我.根据以下答案,确定加密与非加密更有意义,因为要知道请求中的哪些http服务器.
dc5*_*dc5 10
该req参数是IncomingMessage的一个实例,您可以从中访问套接字.
从那里,您可以访问localPort和remotePort.
就像是:
console.log(req.socket.localPort);
console.log(req.socket.remotePort);
Run Code Online (Sandbox Code Playgroud)
如果您使用的是http://localhost:<port_number>,那么您可以使用属性获取端口号req.headers.host。
例子:
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);
Run Code Online (Sandbox Code Playgroud)
您也可以检查服务器实例或连接对象,而不是检查端口号:
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);
Run Code Online (Sandbox Code Playgroud)
这样你就可以得到端口号:
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();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7214 次 |
| 最近记录: |