node-sitefile
Version:
Bootstrap Express webserver for misc. resources using Sitefile
91 lines (65 loc) • 2.15 kB
text/coffeescript
fs = require 'fs'
path = require 'path'
sitefile = require '../sitefile'
knex_util = require '../knex'
module.exports = ( ctx={} ) ->
try
knex = require 'knex'
catch err
if err.code == 'MODULE_NOT_FOUND'
return {}
throw err
name: 'knex'
label: ''
usage: """
knex:**/*.json
Loads a JSON file to use as index to neighbouring database file, and a
models and migration folder resource.
The config is passed to Knex and Bookshelf after the file and
migrations.directory attributes updated to reflect the correct sub-path.
"""
defaults:
default: {}
sql: route: options: cache: true
generate:
# XXX: initial sketch on non-stream endpoints
# Data endpoint: Prepare Knex session on resource context
db: ( rctx ) ->
sitefile.log 'Knex DB:', rctx.res.path
sqlctx =
knex:
config: knex_util.load_config rctx, ctx
# Initialize and update DB
sqlctx.knex.db = db = knex sqlctx.knex.config
knex_util.update sqlctx.knex, ctx
sqlctx
# Data endpoint: the spec must lead to a JS/Coffee file to accept Knex
sql: ( rctx ) ->
sitefile.log 'Knex SQL:', rctx.res.path
#ctx._routers.generator('.db', rctx) rctx
rctx.res.sqlcb = require( './'+ rctx.res.path )
if rctx.res.options.cache
res:
data: rctx.res.sqlcb(rctx.knex.db, rctx)
else
res:
data: ( rctx ) -> rctx.res.sqlcb(rctx.knex.db, rctx)
# Document endpont: serve config JSON
default: ( rctx ) ->
sitefile.log 'Knex index:', rctx.res.path
config = knex_util.load_config rctx, ctx
# Initialize and update DB
db = knex config
# FIXME: db.migrate.latest()
sitefile.log 'Knex index:', rctx.res.path
sqlctx =
knex:
config: knex_util.load_config rctx, ctx
# Initialize and update DB
sqlctx.knex.db = knex sqlctx.knex.config
knex_util.update sqlctx.knex, ctx
( req, res ) ->
res.write JSON.stringify config
res.end()
if 'knex' is path.basename process.argv[1], '.coffee'
console.log 'mod'