Skip to content

Commit

Permalink
Adding a Promise and async await syntax to meetup data
Browse files Browse the repository at this point in the history
  • Loading branch information
davidfekke committed Oct 29, 2017
1 parent ba3accb commit f55d247
Show file tree
Hide file tree
Showing 7 changed files with 139 additions and 71 deletions.
2 changes: 1 addition & 1 deletion __tests__/nomeetups.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ describe('Test Route with no upcoming meetups', function () {
test('responds to /', function testHomepage(done) {
request(app).get('/').then(response => {
expect(response.header['content-type']).toBe('text/html; charset=utf-8');
expect(response.statusCode).toBe(200);
expect(response.statusCode).toBe(500);
done();
});
});
Expand Down
7 changes: 5 additions & 2 deletions fakes/meetuperrorfake.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*eslint-disable*/
'use strict';

function getNextMeetup(cb) {
function getNextMeetup() {
var err = true;
var results = { utc_offset: -18000000,
venue:
Expand Down Expand Up @@ -37,7 +37,10 @@ function getNextMeetup(cb) {
who: 'Noders' },
status: 'upcoming'
};
cb(err, results);
//cb(err, results);
return new Promise((resolve, reject) => {
reject(true);
});
};

module.exports = getNextMeetup;
7 changes: 5 additions & 2 deletions fakes/meetupfake.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*eslint-disable*/
'use strict';

function getNextMeetup(cb) {
function getNextMeetup() {
var err = false;
var results = { utc_offset: -18000000,
venue:
Expand Down Expand Up @@ -37,7 +37,10 @@ function getNextMeetup(cb) {
who: 'Noders' },
status: 'upcoming'
};
cb(err, results);
//cb(err, results);
return new Promise((resolve, reject) => {
resolve(results);
});
};

module.exports = getNextMeetup;
7 changes: 5 additions & 2 deletions fakes/meetupfakenovenue.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*eslint-disable*/
'use strict';

function getNextMeetup(cb) {
function getNextMeetup() {
var err = false;
var results = { utc_offset: -18000000,
headcount: 0,
Expand All @@ -27,7 +27,10 @@ function getNextMeetup(cb) {
who: 'Noders' },
status: 'upcoming'
};
cb(err, results);
//cb(err, results);
return new Promise((resolve, reject) => {
resolve(results);
});
};

module.exports = getNextMeetup;
15 changes: 7 additions & 8 deletions routes/apicontroller.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@

var getTheSponsors = require('../services/sponsordata');

function getNextMeeting(req, res) {
req.service.getNextMeetup(function callback(err, results) {
if (err) {
res.status(500).send({ meeting: 'Error occured' });
} else {
res.send({ meeting: results });
}
});
async function getNextMeeting(req, res) {
try {
const results = await req.service.getNextMeetup();
res.send({ meeting: results });
} catch (err) {
res.status(500).send({ meeting: 'Error occured' });
}
}

function getSponsors(req, res) {
Expand Down
139 changes: 88 additions & 51 deletions routes/index-route-functions.js
Original file line number Diff line number Diff line change
@@ -1,51 +1,82 @@
'use strict';
const { promisify } = require('util');
/*
* GET home page.
*/

exports.index = function index(req, res) {
req.service.getNextMeetup(function callback(err, results) {
if (err) {
console.log('problem with meetup request: ' + err);
res.status(500).render('error', {
message: 'No app exists',
error: {
status: '500',
stack: 'App Error'
}
});
} else {
var meetingArray = results;
req.service.getTweets(function cb(err2, tweetResults) {
if (err2) {
console.log('problem with twitter request: ' + err2);
res.status(500).render('error', {
message: 'No tweets',
error: {
status: '500',
stack: 'App Twitter Error'
}
});
} else {
if (meetingArray) {
var displayMeetup = Object.keys(meetingArray).length !== 0;
if (displayMeetup && meetingArray.hasOwnProperty('venue')) {
var displayMap = Object.keys(meetingArray.venue).length !== 0;
}
}
var displayTweets = tweetResults.tweets.length !== 0;
res.render('index', {
title: 'JaxNode User Group',
meeting: meetingArray,
tweets: tweetResults.tweets,
displayMeetup: displayMeetup,
displayMap: displayMap,
displayTweets: displayTweets
});
}
});
exports.index = async function index(req, res) {
const getMyLatestTweets = promisify(req.service.getTweets);
try {
const meetingArray = await req.service.getNextMeetup();
const tweetResults = await getMyLatestTweets();
//if (meetingArray) {
const displayMeetup = Object.keys(meetingArray).length !== 0;
if (displayMeetup && meetingArray.hasOwnProperty('venue')) {
var displayMap = Object.keys(meetingArray.venue).length !== 0;
}
});
//}
const displayTweets = tweetResults.tweets.length !== 0;
res.render('index', {
title: 'JaxNode User Group',
meeting: meetingArray,
tweets: tweetResults.tweets,
displayMeetup: displayMeetup,
displayMap: displayMap,
displayTweets: displayTweets
});
} catch (err) {
console.log('problem with meetup request: ' + err);
res.status(500).render('error', {
message: 'No app exists',
error: {
status: '500',
stack: 'App Error'
}
});
}

// req.service.getNextMeetup(function callback(err, results) {
// if (err) {
// console.log('problem with meetup request: ' + err);
// res.status(500).render('error', {
// message: 'No app exists',
// error: {
// status: '500',
// stack: 'App Error'
// }
// });
// } else {
// var meetingArray = results;
// req.service.getTweets(function cb(err2, tweetResults) {
// if (err2) {
// console.log('problem with twitter request: ' + err2);
// res.status(500).render('error', {
// message: 'No tweets',
// error: {
// status: '500',
// stack: 'App Twitter Error'
// }
// });
// } else {
// if (meetingArray) {
// var displayMeetup = Object.keys(meetingArray).length !== 0;
// if (displayMeetup && meetingArray.hasOwnProperty('venue')) {
// var displayMap = Object.keys(meetingArray.venue).length !== 0;
// }
// }
// var displayTweets = tweetResults.tweets.length !== 0;
// res.render('index', {
// title: 'JaxNode User Group',
// meeting: meetingArray,
// tweets: tweetResults.tweets,
// displayMeetup: displayMeetup,
// displayMap: displayMap,
// displayTweets: displayTweets
// });
// }
// });
// }
// });
};

exports.code = async function code(req, res) {
Expand All @@ -71,15 +102,21 @@ exports.code = async function code(req, res) {
}
};

exports.api = function api(req, res) {
req.service.getNextMeetup(function callback(err, results) {
if (err) {
console.log('problem with request: ' + err);
res.status(500).send({ meeting: 'Error occured' });
} else {
res.send({ meeting: results });
}
});
exports.api = async function api(req, res) {
try {
const results = await req.service.getNextMeetup();
res.send({ meeting: results });
} catch (err) {
res.status(500).send({ meeting: 'Error occured' });
}
// req.service.getNextMeetup(function callback(err, results) {
// if (err) {
// console.log('problem with request: ' + err);
// res.status(500).send({ meeting: 'Error occured' });
// } else {
// res.send({ meeting: results });
// }
// });
};

function nameCompare(a, b) {
Expand Down
33 changes: 28 additions & 5 deletions services/meetupdata.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
'use strict';

var https = require('https');
var nextMeeting = '';
var cache = require('memory-cache');
var moment = require('moment-timezone');
//var https = require('https');
//var nextMeeting = '';
const fetch = require('node-fetch');
const cache = require('memory-cache');
const moment = require('moment-timezone');

/*
* Set up http options for the Meetup API.
Expand All @@ -25,6 +26,27 @@ function setTimeToNewYork(meetingArray) {
}
}

function getNextMeetupV2() {
return new Promise((resolve, reject) => {
const meetingCache = cache.get('nextMeeting');
if (meetingCache) {
console.log(meetingCache);
resolve(meetingCache[0]);
} else {
fetch('https://api.meetup.com/2/events?&sign=true&group_id=10250862&page=20&key=' + process.env.meetupapi_key).then(response => {
return response.json();
}).then(json => {
const meetingArray = json.results;
setTimeToNewYork(meetingArray);
cache.put('nextMeeting', meetingArray, 3600000);
resolve(meetingArray[0]);
}).catch(err => {
reject(err);
});
}
});
}

function getNextMeetup(cb) {
var sreq = https.request(httpsOptions, function (response) {
response.setEncoding('utf8');
Expand Down Expand Up @@ -58,4 +80,5 @@ function getNextMeetup(cb) {
sreq.end();
}

module.exports = getNextMeetup;
// module.exports = getNextMeetup;
module.exports = getNextMeetupV2;

0 comments on commit f55d247

Please sign in to comment.