Repository navigation
Expand file tree
/
Copy pathapp.js
More file actions
87 lines (80 loc) · 2.59 KB
/
Copy pathapp.js
File metadata and controls
87 lines (80 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
var Arrow = require('arrow'),
server = new Arrow(),
// hbs = Arrow.Middleware.getRendererEngine('hbs');
ejs = require('ejs'),
engine = {};
engine.ejs = ejs;
engine.createRenderer = function (content, filename, app) {
return function(filename, opts, callback) {
if (!content) {
content = require('fs').readFileSync(filename, 'utf8').toString();
}
callback(null, ejs.render(content, opts));
}
};
engine.extension = 'ejs';
server.middleware.registerRendererEngine(engine);
const http = require('http');
const openWeatherAPPID = 'd9f5b4e45c38241c2caa4d9f389825e5';
// create new collection from the results, mapped by day
function mapForecast (forecast) {
let dayList = {};
forecast.forEach((element, index) => {
let day = element.dt_txt.substring(0,10);
if (!dayList[day]) {
dayList[day] = { list: [element], min: element.main.temp, max: element.main.temp }
} else {
dayList[day].list.push(element);
if (element.main.temp < dayList[day].min) dayList[day].min = element.main.temp;
if (element.main.temp > dayList[day].max) dayList[day].max = element.main.temp;
}
});
// let dayArray = [];
// for (let day in dayList) {
// if (dayList.hasOwnProperty(day)) dayArray.push(dayList[day]);
// }
return dayList;
}
// lifecycle examples
server.on('starting', function () {
server.logger.debug('server is starting!');
let forecastAPI = new Arrow.API({
group: 'forecast',
path: '/api/forecast/:lat/:lon',
method: 'GET',
description: 'make internal call to get 5 day forecast',
model: 'forecast',
parameters: {
lat: {description: 'Current user latitude', required: true},
lon: {description: 'Current user longitude', required: true}
},
action: function (request, response, next) {
let options = {
host: 'api.openweathermap.org',
path: `/data/2.5/forecast?lat=${request.params.lat}&lon=${request.params.lon}&appid=${openWeatherAPPID}`,
method: 'GET',
}
http.request(options, (res) => {
let forecastData = '';
res.setEncoding('utf8');
res.on('data', (chunk) => forecastData += chunk);
res.on('end', () => {
response.setHeader('Content-Type', 'application/json');
let parsedData = JSON.parse(forecastData);
parsedData.list = mapForecast(parsedData.list);
response.send(JSON.stringify(parsedData));
next(null, parsedData);
});
}).on('error', (err) => {
next(err);
}).end();
}
}, server.config, server);
server.addAPI(forecastAPI);
forecastAPI.bind(server.app);
});
server.on('started', function () {
server.logger.debug('server started!');
});
// start the server
server.start();