axiom
Version:
Environment setup/runtime standardization for Node.js applications.
43 lines (32 loc) • 940 B
text/coffeescript
{join} = require 'path'
fs = require 'fs'
http = require 'http'
https = require 'https'
read = (file) -> fs.readFileSync file, 'utf8'
config =
port: 4000
ssl: false
module.exports = (port, app, done) ->
app ?= ->
done ?= ->
if config.ssl
# read cert files
ca = config.ssl.ca || []
options =
key: read config.ssl.key
cert: read config.ssl.cert
ca: ca.map read
# create server with ssl
server = https.createServer(options, app).listen port, done
#http server to redirect to https
if (port is config.port) and config.ssl.redirectFrom?
redirect = (req, res) ->
redirectTarget = "https://#{req.headers.host}#{req.url}"
res.writeHead 301, {
"Location": redirectTarget
}
res.end()
redirectServer = http.createServer(redirect).listen config.ssl.redirectFrom
return server
else
http.createServer(app).listen port, done