2017-01-30 6 views
3

Я изучаю Nodejs и ExpressJS. Я пытаюсь использовать модули ExpressJS и 2 узла (request-ip и geoip2), чтобы получить IP-адрес клиента для геолокации, а затем вывести геолокацию в браузере с помощью AngularJS (1.x).Использование Nodejs, Express и AngularJS для отображения IP-адресов в браузере

До сих пор для моего Nodejs и Expressjs кода у меня есть

var express = require('express'); 
// require request-ip and register it as middleware 
var requestIp = require('request-ip'); 
// to convert the ip into geolocation coords 
var geoip2 = require('geoip2'); 

// Init app 
var app = express(); 
var port = process.env.PORT || 8000; 

geoip2.init(); // init the db 

//app.use(requestIp.mw({ attributeName: 'myCustomAttributeName'})); 
var ip = '207.97.227.239';//67.183.57.64, 207.97.227.239 

// respond to homepage req 
app.get('/', function (req, res, next) { 
    //var ip = req.myCustomAttributeName;// use this for live 
    //var ip = '207.97.227.239';/* use this for testing */ 
    console.log('requestIP is ' + ip); 
    next(); 
    // geolocation 
    geoip2.lookupSimple(ip, function(error, result) { 
     if (error) { 
     console.log("Error: %s", error); 
     } 
     else if (result) { 
     console.log(result);//ipType was causing console.log duplication, IDK why 
     } 
    }); 
}); 

// set static folder 
app.use('/', express.static(__dirname + '/public')); 

app.listen(port, function(){ 
    console.log('user location app is running'); 
}); 

И Угловое У меня есть

angular.module('UserLocation', []); 

angular.module('UserLocation') 
    .controller('MainController', MainController); 

MainController.$inject = ['$http']; 

function MainController($http) { 
    var vm = this; 
    vm.result = ''; 

    vm.message = 'Hello World'; 
    vm.getLocation = function() { 
     console.log(); 
     return $http.get('localhost:8000', { 
     params: {result: result} 
     }) 
     .then(function(result){ 
     console.log(result); 
     }) 
     }; 
    }; 

vm.result в угловом контроллер для результата от модуля Node geoip2, который выполняет геолокации.

Я могу получить result в консоли без проблем, но я не уверен, как передать его Угловому. Я пользуюсь услугой $http, но я не уверен, куда идти отсюда ...?

Как передать result с модуля узла geoip2 на мой угловой контроллер с помощью $ http?

+1

использование '$ http' для получения с сервера – charlietfl

+0

@charlietfl вы можете дать маленький пример этого, просто что-то, чтобы начать меня? Довольно новичок в Nodejs. – user3125823

ответ

1

Проблема в том, что вы звоните дальше, прежде чем вы даже закончите.

app.get('/', function (req, res, next) { 
    //next(); this line should be commented 
    // geolocation 
    geoip2.lookupSimple(ip, function(error, result) { 
     if (error) 
     return res.status(400).json({error: 'Something happened'}); 

     return res.send(result); 
    }); 
}); 

Тогда на угловой

$http({ 
    method: 'GET', 
    url: '/yourURL' 
}).then(function (response) { 
    console.log(response); 
}); 

Если вы хотите использовать IP пользователя, чтобы получить местоположение:

app.get('/', function (req, res, next) { 
    //next(); this line should be commented 
    // geolocation 

    var ip = req.headers['x-forwarded-for'] || 
    req.connection.remoteAddress || 
    req.socket.remoteAddress || 
    req.connection.socket.remoteAddress; 

    geoip2.lookupSimple(ip, function(error, result) { 
     if (error) 
     return res.status(400).json({error: 'Something happened'}); 

     return res.send(result); 
    }); 
}); 
+0

спасибо, огромное спасибо! Последнее, похоже, не переходит к Angular, потому что, когда я обновляю Chrome, мой Hello World не отображает ... его просто json responese из Node ... любые мысли? – user3125823

+0

Ну, я не знаю, как выглядит ваш угловой внешний вид, кроме того, что вы разместили. Угловая работа? – yBrodsky

+0

Угловой я написал это ... ничего больше и да, он работал до – user3125823