add counter implementaiton with async-redis

This commit is contained in:
Jakub Sokołowski 2018-10-16 13:55:00 -04:00
parent a49902da00
commit 186116c6c3
3 changed files with 28 additions and 17 deletions

View File

@ -4,7 +4,7 @@
"description": "Minimal API for counting clicks",
"main": "index.js",
"dependencies": {
"ioredis": "^4.1.0",
"async-redis": "^1.1.4",
"koa": "^2.5.3",
"koa-json": "^2.0.2",
"koa-router": "^7.4.0"

View File

@ -1,14 +1,20 @@
//const Redis = require('ioredis')
//const redis = new Redis()
class Counter {
constructor(redis) {
this.redis = redis
/* make sure we don't miss errors */
this.redis.on("error", (err) => { console.log("Error: " + err) })
}
var COUNTER = 0
async incr (val) {
/* default to incrementing by one */
val = val == undefined ? 1 : val
/* increment */
this.redis.incr('default')
}
exports.incr = (val) => {
/* default to incrementing by one */
val = val == undefined ? 1 : val
COUNTER += val
async state () {
return await this.redis.get('default')
}
}
exports.state = () => {
return COUNTER
}
module.exports = Counter

View File

@ -1,22 +1,27 @@
const Koa = require('koa')
const Router = require('koa-router')
const JSON = require('koa-json')
const Counter = require('./counter')
const Counter = require('./counter')
const Redis = require('async-redis')
/* DEFAULTS */
let LISTEN_PORT = 3000
const REDIS_HOST = 'localhost'
const REDIS_PORT = 6379
const LISTEN_PORT = 3000
const app = new Koa()
const router = new Router()
const redis = Redis.createClient(REDIS_PORT, REDIS_HOST)
const counter = new Counter(redis)
router.put('/click', async ctx => {
Counter.incr()
ctx.body = { 'counter': Counter.state() }
counter.incr()
ctx.body = { 'counter': await counter.state() }
});
router.get('/clicks', async ctx => {
ctx.body = { 'counter': Counter.state() }
ctx.body = { 'counter': await counter.state() }
});
app.use(JSON({pretty: true}))