46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
const serverRouter = require('server-router')
|
|
const hyperstream = require('hyperstream')
|
|
const browserify = require('browserify')
|
|
const bankai = require('bankai')
|
|
const http = require('http')
|
|
|
|
const PORT = 8080
|
|
const client = require('./client')
|
|
|
|
// If an incoming request accepts "text/html", render the
|
|
// appropriate HTML. Else use the API server
|
|
const apiRouter = createRouter()
|
|
const server = http.createServer(function (req, res) {
|
|
if (/text\/html/.test(req.headers.accept)) handleHtml(req, res)
|
|
else apiRouter(req, res)
|
|
})
|
|
server.listen(PORT, () => process.stdout.write(`listening on port ${PORT}\n`))
|
|
|
|
// create a new router
|
|
// null -> fn
|
|
function createRouter () {
|
|
const apiRouter = serverRouter('/404')
|
|
|
|
apiRouter.on('/404', (req, res) => res.end('404 not found'))
|
|
apiRouter.on('/', (req, res) => res.end('nothing to be found here'))
|
|
|
|
const js = bankai.js(browserify, require.resolve('./client.js'))
|
|
apiRouter.on('/bundle.js', (req, res) => js(req, res).pipe(res))
|
|
|
|
return apiRouter
|
|
}
|
|
|
|
// render the client to string
|
|
// based on the requested url
|
|
// (obj, obj) -> null
|
|
const createIndex = bankai.html({ favicon: false, css: false })
|
|
function handleHtml (req, res) {
|
|
res.setHeader('Content-Type', 'text/html; charset=utf-8')
|
|
|
|
const state = { message: { server: 'hello server!' } }
|
|
const inner = client.toString(req.url, state)
|
|
const hs = hyperstream({ 'body': { _appendHtml: inner } })
|
|
|
|
createIndex(req, res).pipe(hs).pipe(res)
|
|
}
|