rc-web@69
|
1 #!/usr/bin/env node
|
rc-web@69
|
2
|
rc-web@69
|
3 var fs = require('fs'),
|
rc-web@69
|
4 path = require('path'),
|
rc-web@69
|
5 tty = require('tty'),
|
rc-web@69
|
6 statik = require('./../lib/node-static');
|
rc-web@69
|
7
|
rc-web@69
|
8 var argv = require('optimist')
|
rc-web@69
|
9 .usage([
|
rc-web@69
|
10 'USAGE: $0 [-p <port>] [<directory>]',
|
rc-web@69
|
11 'simple, rfc 2616 compliant file streaming module for node']
|
rc-web@69
|
12 .join('\n\n'))
|
rc-web@69
|
13 .option('port', {
|
rc-web@69
|
14 alias: 'p',
|
rc-web@69
|
15 'default': 8080,
|
rc-web@69
|
16 description: 'TCP port at which the files will be served'
|
rc-web@69
|
17 })
|
rc-web@69
|
18 .option('cache', {
|
rc-web@69
|
19 alias: 'c',
|
rc-web@69
|
20 description: '"Cache-Control" header setting, defaults to 3600'
|
rc-web@69
|
21 })
|
rc-web@69
|
22 .option('version', {
|
rc-web@69
|
23 alias: 'v',
|
rc-web@69
|
24 description: 'node-static version'
|
rc-web@69
|
25 })
|
rc-web@69
|
26 .option('headers', {
|
rc-web@69
|
27 alias: 'H',
|
rc-web@69
|
28 description: 'additional headers (in JSON format)'
|
rc-web@69
|
29 })
|
rc-web@69
|
30 .option('header-file', {
|
rc-web@69
|
31 alias: 'f',
|
rc-web@69
|
32 description: 'JSON file of additional headers'
|
rc-web@69
|
33 })
|
rc-web@69
|
34 .option('help', {
|
rc-web@69
|
35 alias: 'h',
|
rc-web@69
|
36 description: 'display this help message'
|
rc-web@69
|
37 })
|
rc-web@69
|
38 .argv;
|
rc-web@69
|
39
|
rc-web@69
|
40 var dir = argv._[0] || '.';
|
rc-web@69
|
41
|
rc-web@69
|
42 var colors = require('colors');
|
rc-web@69
|
43
|
rc-web@69
|
44 var log = function(request, response, statusCode) {
|
rc-web@69
|
45 var d = new Date();
|
rc-web@69
|
46 var seconds = d.getSeconds() < 10? '0'+d.getSeconds() : d.getSeconds(),
|
rc-web@69
|
47 datestr = d.getHours() + ':' + d.getMinutes() + ':' + seconds,
|
rc-web@69
|
48 line = datestr + ' [' + response.statusCode + ']: ' + request.url,
|
rc-web@69
|
49 colorized = line;
|
rc-web@69
|
50 if (tty.isatty(process.stdout.fd))
|
rc-web@69
|
51 colorized = (response.statusCode >= 500) ? line.red.bold :
|
rc-web@69
|
52 (response.statusCode >= 400) ? line.red :
|
rc-web@69
|
53 line;
|
rc-web@69
|
54 console.log(colorized);
|
rc-web@69
|
55 };
|
rc-web@69
|
56
|
rc-web@69
|
57 var file, options;
|
rc-web@69
|
58
|
rc-web@69
|
59 if (argv.help){
|
rc-web@69
|
60 require('optimist').showHelp(console.log);
|
rc-web@69
|
61 process.exit(0);
|
rc-web@69
|
62 }
|
rc-web@69
|
63
|
rc-web@69
|
64 if (argv.version){
|
rc-web@69
|
65 console.log('node-static', statik.version.join('.'));
|
rc-web@69
|
66 process.exit(0);
|
rc-web@69
|
67 }
|
rc-web@69
|
68
|
rc-web@69
|
69 if (argv.cache){
|
rc-web@69
|
70 (options = options || {}).cache = argv.cache;
|
rc-web@69
|
71 }
|
rc-web@69
|
72
|
rc-web@69
|
73 if (argv.headers){
|
rc-web@69
|
74 (options = options || {}).headers = JSON.parse(argv.headers);
|
rc-web@69
|
75 }
|
rc-web@69
|
76
|
rc-web@69
|
77 if (argv['header-file']){
|
rc-web@69
|
78 (options = options || {}).headers =
|
rc-web@69
|
79 JSON.parse(fs.readFileSync(argv['header-file']));
|
rc-web@69
|
80 }
|
rc-web@69
|
81
|
rc-web@69
|
82 file = new(statik.Server)(dir, options);
|
rc-web@69
|
83
|
rc-web@69
|
84 require('http').createServer(function (request, response) {
|
rc-web@69
|
85 request.addListener('end', function () {
|
rc-web@69
|
86 file.serve(request, response, function(e, rsp) {
|
rc-web@69
|
87 if (e && e.status === 404) {
|
rc-web@69
|
88 response.writeHead(e.status, e.headers);
|
rob@76
|
89 response.end("Not Found");
|
rc-web@69
|
90 log(request, response);
|
rc-web@69
|
91 } else {
|
rc-web@69
|
92 log(request, response);
|
rc-web@69
|
93 }
|
rc-web@69
|
94 });
|
rc-web@69
|
95 }).resume();
|
rc-web@69
|
96 }).listen(+argv.port);
|
rc-web@69
|
97
|
rc-web@69
|
98 console.log('serving "' + dir + '" at http://127.0.0.1:' + argv.port);
|
rc-web@69
|
99
|