2017-01-30 7 views
3

Nodejs 및 ExpressJS를 익히고 있습니다. 나는 ExpressJS와 2 노드 모듈 (request-ipgeoip2)을 사용하여 geolocation에 대한 클라이언트 IP 주소를 얻은 다음 AngularJS (1.x)를 사용하여 브라우저에서 geolocation을 출력하려고합니다.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을 가지고 수행하는 geoip2 노드 모듈의 결과입니다 지구 위치.

콘솔에서 result을 얻을 수는 있지만 문제는 Angular로 전달하는 방법을 모르겠습니다. $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 ... 모든 의견이 있습니까? – user3125823

+0

글쎄, 내가 게시 한 것 이외의 각도가 어떻게 생겼는지 모르겠다. 각이 작동합니까? – yBrodsky

+0

Angular I posted ... 더 이상 그래도 작동하지 않습니다. – user3125823