Node.js express: сохранить req.ip в переменную - PullRequest
0 голосов
/ 19 октября 2018

У меня есть следующий код, в котором я могу напечатать внешний ip и порт подключающегося клиента к моему http-серверу.Можно ли сохранить IP и порт для переменной?Глобальное объявление переменной и ее изменение внутри app.use(...), похоже, не работает.

var port = 3000;

var express = require('express');
var app = express();
var http = require('http').Server(app);

app.use(function (req, res, next) {
    console.log(req.ip);
    console.log(req.hostname);
    console.log(req.connection.remotePort);
    next();
});

app.use(express.static(__dirname + '/'));

http.listen(port, function(){
  console.log(`Listening on http://127.0.0.1:${port}`);
});

var openURL = require('opn');
console.log("Opening Server URL")
openURL(`http://127.0.0.1:${port}`);

Заранее спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Моя репутация слишком низкая, поэтому я не могу комментировать, к сожалению, но я не вижу, где в вашем коде вы пытаетесь хранить IP-адреса клиентов и глобально портировать?

Я не вижупочему это не сработает.Я только что проверил это локально, и это прекрасно работает:

var port = 3000
var express = require('express')
var app = express()
var http = require('http').Server(app)
var clientIP = null
var clientPORT = null

app.use(function (req, res, next) {
    clientIP = req.ip
    clientPORT = req.connection.remotePort
    console.log(req.ip)
    console.log(req.connection.remotePort)
    next()
})

http.listen(port, function() {
    console.log('listening')
})

setInterval(function() {
    console.log(clientIP)
    console.log(clientPORT)
}, 1000)

Я установил интервал, чтобы мы могли видеть, действительно ли переменные обновляются.Первоначально, когда функция интервала запускается, она печатает ноль.Но после того, как я сделал запрос к localhost: 3000 он записывает мой ip и порт, а затем распечатывает это.

0 голосов
/ 19 октября 2018

В вашей переменной http вы можете объявить переменную

var http = require('http').Server(app);
var currentIP; // you can use "let" if you are using es6

, затем вы можете сделать следующее внутри вашей функции, где вы хотите установить для переменной req.ip.

currentIP = req.ip;
...