Geolocation in Total.js

Fri May 12 2017 07:25:59 GMT+0200 (Central European Summer Time), Martin Smola

Geolocation in Total.js

  • this tutorial uses a middleware
  • obtained data will be stored in req.geolocation variable
  • this tutorial extends Controller by adding geolocation() method which returns req.geolocation

Create a definition file e.g. geolocation.js:

// Temporary cache
var CACHE = {};

F.middleware('geolocation', function(req, res, next) {

    if (CACHE[req.ip] !== undefined) {
        req.geolocation = CACHE[req.ip];
        next();
        return;
    }

    var builder = new RESTBuilder();
    builder.url('https://freegeoip.net/json/' + req.ip);
    builder.get();
    builder.exec(function(err, response) {
        CACHE[req.ip] = req.geolocation = err ? null : response;
        next();
    });
});

Controller.prototype.geolocation = function() {
    return this.req.geolocation;
};

// Clears cache every 10 minutes
F.on('service', function(counter) {
    if (counter % 10 === 0)
        CACHE = {};
});

Usage

Now we extend routes where we want to use Geolocation.

exports.install = function() {
    F.route('/', view_index, ['#geolocation']);
};

function view_homepage() {

    console.log(this.geolocation());
    // or
    console.log(this.req.geolocation);

    this.view('index');
}

Result:

{ ip: '62.168.127.195',
  country_code: 'SK',
  country_name: 'Slovak Republic',
  region_code: '',
  region_name: '',
  city: '',
  zip_code: '',
  time_zone: 'Europe/Bratislava',
  latitude: 48.6667,
  longitude: 19.5,
  metro_code: 0 }

Tips

  • we can use a global middleware via F.use('geolocation', '*', ['web']);
  • we can store geolocation data in cookies or in a database

Tags

Follow us

Latest blogs
Flow v6 is here!
Thu Mar 07 2019 11:53:54 GMT+0100 (Central European Standard Time)
A critical security fix
Wed Feb 13 2019 22:15:39 GMT+0100 (Central European Standard Time)
New release: Total.js v3.2
Wed Feb 13 2019 22:14:39 GMT+0100 (Central European Standard Time)
Total.js Wiki v2
Fri Jan 04 2019 22:15:01 GMT+0100 (Central European Standard Time)
Total Year 2018
Thu Jan 03 2019 21:14:00 GMT+0100 (Central European Standard Time)

Latest comments
Nice tip
Mauro Junior
Thu Sep 20 2018 21:41:02 GMT+0200 (Central European Summer Time)
Not only for Total.js. You can communicate with different websocket servers.
Peter Širka
Mon Apr 23 2018 20:08:20 GMT+0200 (Central European Summer Time)
Marko: you need to create a buffer with this codepage and write byte-to-byte string. I recommend ...
Peter Širka
Mon Apr 23 2018 20:06:21 GMT+0200 (Central European Summer Time)
Is WEBSOCKETCLIENT only for internal ws connections between totaljs apps?
Stelios Stephanua
Fri Mar 16 2018 06:04:22 GMT+0100 (Central European Standard Time)
Total.js is amazing! ;)
Leonardo Hessel
Tue Dec 19 2017 19:51:15 GMT+0100 (Central European Standard Time)

Pixabay


Read more

Flow v6 is here!

News: We have released a new version of Flow. This version brings great new features and UI improvements.

Thu Mar 07 2019 11:53:54 GMT+0100 (Central European Standard Time)
A critical security fix

News: We were notified about the critical security bug in Total.js framework. Read a prevention.

Wed Feb 13 2019 22:15:39 GMT+0100 (Central European Standard Time)
New release: Total.js v3.2

News: This new release brings a critical security fix and small new improvements. Update Total.js now.

Wed Feb 13 2019 22:14:39 GMT+0100 (Central European Standard Time)
Total.js Wiki v2

Products: I have released a new version of Total.js Wiki. New version brings new improvements.

Fri Jan 04 2019 22:15:01 GMT+0100 (Central European Standard Time)
Total Year 2018

Business: Last year was perfect for Total.js platform. Total.js platform grows up and it has great results.

Thu Jan 03 2019 21:14:00 GMT+0100 (Central European Standard Time)
Total.js Code Editor v1

Products: Try our real-time collaboration tool for Total Developers. Code Editor offers great features for development.

Fri Dec 07 2018 22:55:13 GMT+0100 (Central European Standard Time)