const express = require('express') const app = express(); const axios = require('axios'); const querystring = require('querystring'); app.use(express.static('public')) let tokenExpirationDate = false; let bearerToken; const data = { grant_type:'password', username:process.env.REDDITUSR, password:process.env.REDDITPWD } const auth = { username: process.env.APPID, password: process.env.APPSECRET } const getToken = async ()=>{ if(tokenExpirationDate === false || Date.now() > tokenExpirationDate){ const response = await axios({ url:'https://www.reddit.com/api/v1/access_token', method:'post', auth:auth, data:querystring.stringify(data) }) bearerToken = response.data.access_token tokenExpirationDate = Date.now()+(response.data.expires_in*1000) } const config = { headers:{ Authorization: 'bearer '+ bearerToken } } return config } const generate = async (req, res)=>{ let url = `https://oauth.reddit.com/user/mahuntington/saved?count=100`; if(req.params.direction){ url += `&${req.params.direction}=${req.params.page}` } const config = await getToken() const response = await axios.get(url, config) const next = response.data.data.after; const posts = response.data.data.children.filter(post => { return post.data.subreddit === 'ProgrammerHumor' && post.data.removed_by_category === null }).map(post => { return post.data.permalink }) res.json({ posts, next }) } getToken(); app.get('/posts/', generate) app.get('/posts/:direction/:page', generate) app.listen(3002, ()=>{ console.log('listening'); })