app.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. 'use strict';
  2. var express = require('express');
  3. var app = express();
  4. var geocoder = require('./geocoder.js');
  5. var isGeocodeInitialized = false;
  6. app.get('/healthcheck', function(req, res) {
  7. return res.status(200).send('OK');
  8. });
  9. app.get('/deep-healthcheck', function(req, res) {
  10. if (isGeocodeInitialized) {
  11. return res.status(200).send('OK');
  12. } else {
  13. return res.status(503).send('Not ready yet.');
  14. }
  15. });
  16. app.get(/geocode/, function(req, res) {
  17. if (!isGeocodeInitialized) {
  18. return res.status(503).send('Not ready yet.');
  19. }
  20. var lat = req.query.latitude || false;
  21. var lon = req.query.longitude || false;
  22. var maxResults = req.query.maxResults || 1;
  23. if (!lat || !lon) {
  24. return res.status(400).send('Bad Request');
  25. }
  26. var points = [];
  27. if (Array.isArray(lat) && Array.isArray(lon)) {
  28. if (lat.length !== lon.length) {
  29. return res.status(400).send('Bad Request');
  30. }
  31. for (var i = 0, lenI = lat.length; i < lenI; i++) {
  32. points[i] = {latitude: lat[i], longitude: lon[i]};
  33. }
  34. } else {
  35. points[0] = {latitude: lat, longitude: lon};
  36. }
  37. geocoder.lookUp(points, maxResults, function(err, addresses) {
  38. if (err) {
  39. return res.status(500).send(err);
  40. }
  41. return res.send(addresses);
  42. });
  43. });
  44. var port = Number(process.env.PORT || 3000);
  45. app.listen(port, function() {
  46. console.log('Local reverse geocoder listening on port ' + port);
  47. console.log('Initializing Geocoder...');
  48. geocoder.init({}, function() {
  49. console.log('Geocoder initialized and ready.')
  50. isGeocodeInitialized = true;
  51. });
  52. });