@danielkalen/simplybind
Version:
Magically simple, framework-less one-way/two-way data binding for frontend/backend in ~5kb.
86 lines (55 loc) • 2.32 kB
text/coffeescript
Promise = require 'bluebird'
express = require 'express'
compress = require 'compression'
bodyParser = require 'body-parser'
uaParser = require 'ua-parser-js'
extend = require 'extend'
fs = Promise.promisifyAll require 'fs-extra'
app = express()
port = 13947
DB = new ()->
@results = {}
fs.ensureFileAsync('results.json').then ()=>
fs.readFileAsync('results.json', 'encoding':'utf8').then (results)=>
@results = JSON.parse(results) if results
@save = ()-> fs.writeFileAsync('results.json', JSON.stringify(@results))
@add = ({library, version, testName, testDesc, result, UA, nonSharedTest})->
UA = getUA(UA)
@results ?= {}
@results[testName] ?= 'name':testName,'desc':testDesc, 'values':{}
@results[testName].nonSharedTest = nonSharedTest or false
@results[testName].values[UA] ?= {}
@results[testName].values[UA][library] ?= {}
@results[testName].values[UA][library][version] = result
@save()
return @
getUA = (uaString = '')->
UA = uaParser(uaString).browser
UA = "#{UA.name} #{UA.major or UA.version}"
## ==========================================================================
## Middleware
## ==========================================================================
app.use compress()
app.use express.static('dist', maxAge: 2592000000)
app.use bodyParser.json({limit:'500mb'}) # Enable JSON req parsing
app.use bodyParser.urlencoded({extended:true, limit:'500mb'})
## ==========================================================================
## Router
## ==========================================================================
app.get '/', (req, res)->
res.sendFile "#{__dirname}/dist/index.html"
app.get '/get', (req, res)->
UA = getUA(req.query.UA)
responseResult = {'selfUA':UA, 'tests':DB.results or {}}
output = extend(true, {}, responseResult)
res.json(output)
app.post '/set', (req, res)->
req.body.nonSharedTest = if req.body.nonSharedTest is 'false' then false else if req.body.nonSharedTest then true
res.json(req.body)
DB.add(req.body)
## ==========================================================================
## Server init
## ==========================================================================
app.listen port, ()->
console.log("Server running on http://localhost:#{port}")
.on 'error', console.log.bind(console)