Uso de Nodejs, Express y AngularJS para mostrar IP en el navegador

Estoy aprendiendo Nodejs y ExpressJS. Estoy intentando usar los módulos ExpressJS y 2 Node ( request-ip y geoip2 ) para obtener la dirección IP del cliente para la geolocalización y luego generar la geolocalización en el navegador utilizando AngularJS (1.x).

Hasta ahora, para mi código Nodejs y Expressjs tengo

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

Y para Angular tengo

 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 en el controlador Angular es para el resultado del módulo geoip2 Node que realiza la geolocalización.

Puedo obtener el result en la consola sin problemas, pero no estoy seguro de cómo pasarlo a Angular. Estoy usando el servicio $http pero no estoy seguro de a dónde ir desde aquí …

¿Cómo paso el result del módulo geoip2 Node a mi controlador Angular con $ http?

El problema es que estás llamando al siguiente antes de que hayas terminado.

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

Entonces en angular

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

Si desea utilizar la IP del usuario para obtener la ubicación:

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