我想弄清楚将用户的geoIP信息传递给客户端javascript的最佳方法是什么。我为此配置了nginx,并且能够将信息发送到我的节点+ express服务器。
我不知道下一步是什么。从谷歌搜索我可以看到我试图发送的标题不能直接被客户端的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;
}
答案 0 :(得分: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);
});
在我的Jade模板中,我有 -
script(type='text/javascript').
var geoip_city =!{JSON.stringify(geoip_city)}
var geoip_country_code = !{JSON.stringify(geoip_country_code)}
来源:so/10919650/(有点吓人的是,差不多5年前才回答这个问题!)
答案 1 :(得分: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;
}