2017-02-22 34 views
0

Я пытаюсь выяснить, каким лучшим способом будет передавать информацию geoIP пользователей на клиентский javascript. Я настроил nginx для этого и могу отправить информацию на мой узел + экспресс-сервер.Передача заголовков nginx клиенту через nodejs

Я не знаю, что следующий шаг. От googling вокруг я вижу, что заголовки, которые я пытаюсь отправить, не могут быть напрямую прочитаны js на стороне клиента.

Это то, что у меня есть -

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; 
     } 

ответ

2

После немного больше google-fu я ответил на свой вопрос.

res.locals - лучший способ сделать это в Экспресс.

Так на сервере теперь я делаю -

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); 
}); 

И в моем шаблоне Джейд у меня есть -

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

Источник: so/10919650/ (бит запугивая, что ответили почти 5 лет назад!)

0

Вы можете сделать это с помощью Nginx add_header:

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

Как это отличается от 'proxy_set_header', который я уже использую? Могу ли я получить доступ к ним из js клиента таким образом? – charsi

+1

'proxy_set_header' добавить заголовок от клиента к серверу, но' add_header' добавить заголовок от сервера к клиенту. –

+0

Ну ладно, я вижу, что я делаю это неправильно. Можно ли запрашивать заголовки nginx из js клиента? – charsi