diff options
| author | Yuval Adam <_@yuv.al> | 2017-10-21 18:07:44 +0300 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2017-10-21 18:07:44 +0300 |
| commit | 8d1cd6e8711cad3550ebbe69e2a2dcf471f3ee67 (patch) | |
| tree | d117316bd219a711f8178f682c596a7c570ed808 | |
| parent | ab998ad8580cb6b96e39d26ac77acc36cd604385 (diff) | |
Handle loading latest images
| -rw-r--r-- | package.json | 1 | ||||
| -rw-r--r-- | server.js | 35 | ||||
| -rw-r--r-- | yarn.lock | 4 |
3 files changed, 38 insertions, 2 deletions
diff --git a/package.json b/package.json index 572e8b5..f2f13f3 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "aws-sdk": "^2.138.0", "express": "^4.16.2", "mapbox-gl": "^0.40.1", + "moment": "^2.19.1", "pug": "^2.0.0-rc.4", "redis": "^2.8.0", "request": "^2.83.0", @@ -4,6 +4,8 @@ const app = express() const redis = require('redis') const client = redis.createClient(process.env.REDIS_URL) +const moment = require('moment') + const request = require('request') const aws = require('aws-sdk') const s3 = new aws.S3() @@ -38,7 +40,7 @@ function fetchImages() { console.log(`Uploading to bucket`) s3.putObject({ Bucket: 'imgs.geshem.space', - Key: `${r}/${d}/${t}.png`, + Key: `${d}/${t}/${r}.png`, ContentType: response.headers['content-type'], ContentLength: response.headers['content-length'], Body: body, @@ -49,7 +51,10 @@ function fetchImages() { client.del(key) } else { - client.set(key, data.ETag.slice(1, -1)) + client.multi([ + ['set', key, data.ETag.slice(1, -1)], + ['del', 'images:latest'] + ]).exec() } }) } @@ -87,6 +92,32 @@ app.use('/', function (req, res, next){ next() }); +app.get('/imgs', function (req, res) { + res.setHeader('Content-Type', 'application/json'); + client.get('images:latest', (err, reply) => { + if (err) { + console.log(err) + } + else if (!reply) { + s3.listObjectsV2({ + Bucket: 'imgs.geshem.space', + //StartAfter: moment().subtract(1, 'days').format('YYYYMMDD') + }, (err, data) => { + const imgs = data.Contents.slice(-20).map( (d) => d.Key) + const imgres = JSON.stringify({ + '140': imgs.filter( (d) => d.endsWith('140.png') ), + '280': imgs.filter( (d) => d.endsWith('280.png') ) + }) + client.set('images:latest', imgres) + res.send(imgres) + }) + } + else { + res.send(reply) + } + }) +}) + app.get('/', function (req, res) { res.render('index', { prod: process.env.NODE_ENV === 'production' }) }) @@ -2991,6 +2991,10 @@ mixin-object@^2.0.1: dependencies: minimist "0.0.8" +moment@^2.19.1: + version "2.19.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.1.tgz#56da1a2d1cbf01d38b7e1afc31c10bcfa1929167" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" |
