rc-web@69: #!/usr/bin/env node rc-web@69: rc-web@69: var fs = require('fs'), rc-web@69: path = require('path'), rc-web@69: tty = require('tty'), rc-web@69: statik = require('./../lib/node-static'); rc-web@69: rc-web@69: var argv = require('optimist') rc-web@69: .usage([ rc-web@69: 'USAGE: $0 [-p ] []', rc-web@69: 'simple, rfc 2616 compliant file streaming module for node'] rc-web@69: .join('\n\n')) rc-web@69: .option('port', { rc-web@69: alias: 'p', rc-web@69: 'default': 8080, rc-web@69: description: 'TCP port at which the files will be served' rc-web@69: }) rc-web@69: .option('cache', { rc-web@69: alias: 'c', rc-web@69: description: '"Cache-Control" header setting, defaults to 3600' rc-web@69: }) rc-web@69: .option('version', { rc-web@69: alias: 'v', rc-web@69: description: 'node-static version' rc-web@69: }) rc-web@69: .option('headers', { rc-web@69: alias: 'H', rc-web@69: description: 'additional headers (in JSON format)' rc-web@69: }) rc-web@69: .option('header-file', { rc-web@69: alias: 'f', rc-web@69: description: 'JSON file of additional headers' rc-web@69: }) rc-web@69: .option('help', { rc-web@69: alias: 'h', rc-web@69: description: 'display this help message' rc-web@69: }) rc-web@69: .argv; rc-web@69: rc-web@69: var dir = argv._[0] || '.'; rc-web@69: rc-web@69: var colors = require('colors'); rc-web@69: rc-web@69: var log = function(request, response, statusCode) { rc-web@69: var d = new Date(); rc-web@69: var seconds = d.getSeconds() < 10? '0'+d.getSeconds() : d.getSeconds(), rc-web@69: datestr = d.getHours() + ':' + d.getMinutes() + ':' + seconds, rc-web@69: line = datestr + ' [' + response.statusCode + ']: ' + request.url, rc-web@69: colorized = line; rc-web@69: if (tty.isatty(process.stdout.fd)) rc-web@69: colorized = (response.statusCode >= 500) ? line.red.bold : rc-web@69: (response.statusCode >= 400) ? line.red : rc-web@69: line; rc-web@69: console.log(colorized); rc-web@69: }; rc-web@69: rc-web@69: var file, options; rc-web@69: rc-web@69: if (argv.help){ rc-web@69: require('optimist').showHelp(console.log); rc-web@69: process.exit(0); rc-web@69: } rc-web@69: rc-web@69: if (argv.version){ rc-web@69: console.log('node-static', statik.version.join('.')); rc-web@69: process.exit(0); rc-web@69: } rc-web@69: rc-web@69: if (argv.cache){ rc-web@69: (options = options || {}).cache = argv.cache; rc-web@69: } rc-web@69: rc-web@69: if (argv.headers){ rc-web@69: (options = options || {}).headers = JSON.parse(argv.headers); rc-web@69: } rc-web@69: rc-web@69: if (argv['header-file']){ rc-web@69: (options = options || {}).headers = rc-web@69: JSON.parse(fs.readFileSync(argv['header-file'])); rc-web@69: } rc-web@69: rc-web@69: file = new(statik.Server)(dir, options); rc-web@69: rc-web@69: require('http').createServer(function (request, response) { rc-web@69: request.addListener('end', function () { rc-web@69: file.serve(request, response, function(e, rsp) { rc-web@69: if (e && e.status === 404) { rc-web@69: response.writeHead(e.status, e.headers); rob@76: response.end("Not Found"); rc-web@69: log(request, response); rc-web@69: } else { rc-web@69: log(request, response); rc-web@69: } rc-web@69: }); rc-web@69: }).resume(); rc-web@69: }).listen(+argv.port); rc-web@69: rc-web@69: console.log('serving "' + dir + '" at http://127.0.0.1:' + argv.port); rc-web@69: