42 lines
1008 B
JavaScript
42 lines
1008 B
JavaScript
import Koa from 'koa'
|
|
import Router from 'koa-router'
|
|
import JSON from 'koa-json'
|
|
import Logger from 'koa-logger'
|
|
|
|
import Counter from './counter'
|
|
import Redis from 'async-redis'
|
|
|
|
/* DEFAULTS */
|
|
const REDIS_HOST = process.env.REDIS_HOST || 'localhost'
|
|
const REDIS_PORT = process.env.REDIS_PORT || 6379
|
|
|
|
const app = new Koa()
|
|
const router = new Router()
|
|
const redis = Redis.createClient(REDIS_PORT, REDIS_HOST)
|
|
const counter = new Counter(redis)
|
|
|
|
app.on('error', (err, ctx) => {
|
|
console.error('server error', err, ctx)
|
|
});
|
|
|
|
router.put('/clicks/:id', async ctx => {
|
|
counter.incr(ctx.params.id)
|
|
ctx.body = { [ctx.params.id]: await counter.state(ctx.params.id) }
|
|
ctx.status = 201
|
|
});
|
|
|
|
router.get('/clicks', async ctx => {
|
|
ctx.body = await counter.list()
|
|
});
|
|
|
|
router.get('/clicks/:id', async ctx => {
|
|
ctx.body = { [ctx.params.id]: await counter.state(ctx.params.id) }
|
|
});
|
|
|
|
app.use(Logger())
|
|
.use(JSON({pretty: true}))
|
|
.use(router.routes())
|
|
.use(router.allowedMethods())
|
|
|
|
module.exports = app
|