2017-02-22 2 views
0

Ich versuche herauszufinden, was der beste Weg wäre, GeoIP-Informationen von Benutzern an clientseitiges Javascript weiterzuleiten. Ich habe nginx dafür konfiguriert und bin in der Lage, die Informationen an meinen Knoten + Express-Server zu senden.Übergabe von Nginx-Headern an den Client über nodejs

Ich weiß nicht, was der nächste Schritt ist. Beim googlen kann ich sehen, dass die Header, die ich senden möchte, nicht direkt von js auf der Client-Seite gelesen werden können.

Das ist, was ich habe -

Nodejs--

router.get('/', function(req, res, next) { 
    res.setHeader("geoip_country_code", req.headers.geoip_country_code); 
    res.setHeader("geoip_city", req.headers.geoip_city); 
    res.render('index', { title: 'bla' }); 
    console.log(req.headers); 
}); 

Nginx -

location/{ 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header GEOIP_COUNTRY_CODE $geoip_country_code; 
      proxy_set_header GEOIP_CITY $geoip_city; 
      proxy_set_header GEOIP_LATITUDE $geoip_latitude; 
      proxy_set_header GEOIP_LONGITUDE $geoip_longitude; 
      proxy_pass http://app:3000; 
     } 

Antwort

2

Nach ein bisschen mehr google-fu Ich habe meine eigene Frage beantwortet.

res.locals ist der beste Weg, dies in Express zu tun.

So auf dem Server jetzt ich tue -

router.get('/', function(req, res, next) { 
    res.locals.geoip_country_code = req.headers.geoip_country_code; 
    res.locals.geoip_city = req.headers.geoip_city; 
    res.render('index', { title: 'bla' }); 
    console.log(req.headers); 
}); 

Und in meiner Jade Vorlage Ich habe -

script(type='text/javascript'). 
    var geoip_city =!{JSON.stringify(geoip_city)} 
    var geoip_country_code = !{JSON.stringify(geoip_country_code)} 

Quelle: so/10919650/ (Bit einschüchternd, dass diese fast 5 Jahren beantwortet wurde vor!)

0

Sie können es nginx add_header verwenden tun:

location/{ 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header GEOIP_COUNTRY_CODE $geoip_country_code; 
      proxy_set_header GEOIP_CITY $geoip_city; 
      proxy_set_header GEOIP_LATITUDE $geoip_latitude; 
      proxy_set_header GEOIP_LONGITUDE $geoip_longitude; 

      add_header geoip_country_code "$geoip_country_code" always; 
      add_header geoip_city "$geoip_city" always; 

      proxy_pass http://app:3000; 
     } 
+0

Wie unterscheidet sich das von 'proxy_set_header', das ich bereits verwende? Wäre ich in der Lage, auf diese Weise vom Client js darauf zuzugreifen? – charsi

+1

'proxy_set_header' fügt einen Header vom Client zum Server hinzu, aber' add_header' fügt einen Header vom Server zum Client hinzu. –

+0

Ah okay, ich kann sehen, dass ich das dann falsch herum mache. Können die Nginx-Header von Client js abgefragt werden? – charsi

Verwandte Themen