Last active
August 5, 2019 15:23
-
-
Save 2pai/8302b84477f6623c427ef13486dced2c to your computer and use it in GitHub Desktop.
for medium
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const mongoose = require('mongoose'); | |
const model = require('./models'); | |
const redis = require('redis'); | |
const client = redis.createClient(); | |
const fetch = require('node-fetch'); | |
require('dotenv').config() | |
mongoose.connect(process.env.MONGOURL, {useNewUrlParser: true}); | |
const banner = mongoose.model('banner', model.banner,'banner'); | |
const getBanner = (req,res) => { | |
const redisKey = 'banner'; | |
client.get(redisKey,(err,data) => { | |
if(data){// cek apakah ada di redis atau tidak | |
res.status(200).send({isCached:true,data:JSON.parse(data)}); | |
}else{ | |
banner.find({},(err,fetchData)=>{ | |
client.set(redisKey,JSON.stringify(fetchData),'EX',60); // simpan hasil query ke dalam redis dalam bentuk JSON yang sudah di jadikan string, kita setting expired selaman 60 (detik) | |
res.status(200).send({data:fetchData}); | |
}); // fetch data dari mongoDB | |
} | |
}); | |
} | |
const postBanner = async (req,res) => { | |
let body = new banner({ | |
bannerAndroid: req.body.bannerAndroid, | |
bannerWebsite: req.body.bannerWebsite, | |
bannerAds: req.body.bannerAds, | |
bannerIOS: req.body.bannerIOS, | |
}) | |
let response = await body.save(); | |
res.status(200).send(response); | |
} | |
const getIPInfo = async (req,res) => { | |
const redisKey = 'keyip:'+req.ip; // key berdasarkan ip user | |
client.get(redisKey,async (err,data) => { | |
if(result){ // cek apakah ada di redis atau tidak | |
res.status(200).send({isCached:true,data:JSON.parse(data)}); | |
}else{ | |
let fetchData = await fetch("http://ip-api.com/json/"+req.ip) | |
.then((response)=> { | |
return response.json(); | |
});// fetch data dari API | |
client.set(redisKey,JSON.stringify(fetchData),'EX',60); // simpan hasil request ke dalam redis dalam bentuk JSON yang sudah di jadikan string, kita setting expired selaman 60 (detik) | |
res.status(200).send({data:fetchData}); | |
} | |
}); | |
} | |
module.exports = { | |
getBanner, | |
getIPInfo, | |
postBanner | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment