UNPKG

alpha-one

Version:

ideas about recurring tasks in Web- and Backend-Application building

181 lines (138 loc) 7.37 kB
############################################################################################################ # ERROR = require 'coffeenode-stacktrace' # njs_util = require 'util' njs_path = require 'path' # njs_fs = require 'fs' #........................................................................................................... TYPES = require 'coffeenode-types' TRM = require 'coffeenode-trm' rpr = TRM.rpr.bind TRM badge = 'using-connect' log = TRM.get_logger 'plain', badge info = TRM.get_logger 'info', badge whisper = TRM.get_logger 'whisper', badge alert = TRM.get_logger 'alert', badge debug = TRM.get_logger 'debug', badge warn = TRM.get_logger 'warn', badge help = TRM.get_logger 'help', badge echo = TRM.echo.bind TRM # rainbow = TRM.rainbow.bind TRM # suspend = require 'coffeenode-suspend' # step = suspend.step # after = suspend.after # eventually = suspend.eventually # immediately = suspend.immediately # every = suspend.every # TEXT = require 'coffeenode-text' #........................................................................................................... ### https://github.com/goodeggs/teacup ### teacup = require 'teacup' #........................................................................................................... templates = require './templates' connect = require 'connect' authom = require 'authom' TRM.dir authom #----------------------------------------------------------------------------------------------------------- write_ok_html_header = ( request, response ) -> status_code = 200 #......................................................................................................... headers = 'Content-Type': 'text/html' 'Connection': 'keep-alive' 'Transfer-Encoding': 'chunked' #......................................................................................................... return response.writeHead status_code, headers #----------------------------------------------------------------------------------------------------------- respond = ( request, response, next ) -> write_ok_html_header request, response response.write """<link rel='shortcut icon' href='/public/favicon.ico?v=#{1 * new Date()}'>""" response.write "<div>RQ##{request_count}</div>" response.end "<div>hello world</div>" #----------------------------------------------------------------------------------------------------------- request_counter_middleware = ( request, response, next ) -> request[ 'count' ] = ( request_count += 1 ) next() #----------------------------------------------------------------------------------------------------------- request_count = 0 #----------------------------------------------------------------------------------------------------------- login = ( user, password, handler ) -> debug "authenticating #{user}:#{password}" handler null, true #----------------------------------------------------------------------------------------------------------- server_options = 'host': '127.0.0.1' 'port': 3000 #----------------------------------------------------------------------------------------------------------- connect_options = 'logger': 'format': 'short' # ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms' 'format': 'tiny' # ':method :url :status :res[content-length] - :response-time ms' 'format': 'default' # ':remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"' 'format': 'mingkwai' # own format 'format': 'dev' # concise output colored by response status for development use # possible to define logger format: connect.logger.format 'mingkwai', ':method :url :status :res[content-length] - :response-time ms' #----------------------------------------------------------------------------------------------------------- app = connect() app.use request_counter_middleware app.use connect.logger connect_options[ 'logger' ][ 'format' ] # app.use connect.basicAuth login ### https://github.com/wdavidw/node-connect-coffee-script ### ### http://learnboost.github.io/stylus/docs/middleware.html ### # stylus.middleware(options) # Options # Return Connect middleware with the given options. # `serve` Serve the stylus files from `dest` [true] # `force` Always re-compile # `src` Source directory used to find .styl files # `dest` Destination directory used to output .css files # when undefined defaults to `src`. # `compile` Custom compile function, accepting the arguments # `(str, path)`. # `compress` Whether the output .css files should be compressed # `firebug` Emits debug infos in the generated css that can # be used by the FireStylus Firebug plugin # `linenos` Emits comments in the generated css indicating # the corresponding stylus line ############################################################################################################ # create servers for the services you'll be using # authom.createServer {} # facebook credentials # authom.createServer {} # github credentials # authom.createServer {} # google credentials # authom.createServer {} # twitter credentials # ... et cetera service_credential_records = [ service: "github" id: "7e38d12b740a339b2d31" secret: "116e41bd4cd160b7fae2fe8cc79c136a884928c3" ] for service_credentials in service_credential_records authom.createServer service_credentials # called when a user is authenticated on any service authom.on 'auth', ( request, response, data ) -> debug 'auth', data # called when an error occurs during authentication authom.on 'error', ( request, response, data ) -> debug 'error', data # TRM.dir app app.use '/auth/:service', authom.app ############################################################################################################ # TEST MIDDLEWARE (see http://howtonode.org/connect-it) test_middleware = -> debug "setting up test_middleware" return ( request, response, next ) -> # TRM.dir 'test request', request # TRM.dir 'test response', response debug 'test' write_ok_html_header request, response response.write 'just a test' response.end() # next() # Calling the handler gives us a place to handle startup matters: app.use '/test', test_middleware() ############################################################################################################ app.use '/public', connect.static njs_path.join __dirname, 'public' # app.use connect.static 'public' app.use respond app.listen server_options[ 'port' ] log TRM.green "listening to #{server_options[ 'host' ]}:#{server_options[ 'port' ]}"