2017-02-22 51 views
0

我想弄清楚什么是最好的方式是将用户的geoIP信息传递给客户端JavaScript。我为此配置了nginx,并且能够将信息发送到我的节点+ express服务器。通过nodejs传递nginx头到客户端

我不知道下一步是什么。从google搜索我可以看到我试图发送的头文件无法直接被客户端的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

多一点后谷歌福我已经回答了我自己的问题。

res.locals是在Express中执行此操作的最佳方法。

所以服务器我现在做的 -

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