Node-Sexstatic
A simple static file server middleware. Use it with a raw http server, express/connect, or flatiron/union!
Also adds the ability to arbitrarily modify output HTML for whatever reason. And adding additional: simple url -> string handlers simple url -> function handlers
see opts.extras if you wanna get what i'm talking about
I may or may not extend this with further addons in the future to suit my needs.
New stuff
var sexstatic = ;var http = opts = processargvport = optsport || optsp || 8000dir = optsroot || opts_0 || process; // new feature #1optsmodifyFunctions = { console; return c; }; // new feature #2optsextras = 'service.html': '<b>oh hello</b>' 'service.json': 'content-type': 'text/json' { return args: processargv ; } 'service.rpc': 'content-type': 'text/plain' { var well = '-- lmao'; return { return '~* so meta '+well+'*~'; }; } ; if optshelp || optsh var u = consoleerror; ; ; return; http;
Examples:
express 3.0.x
var http = ;var express = ;var sexstatic = ;var app = ;app;http;console;
union
var union = ;var sexstatic = ;{var index = src;if index == -1 return src;var out = src;out += '<script type="text/javascript" src="hello-world.js"></script>' + src;return out;}union;console;
fall through
To allow fall through to your custom routes:
API:
sexstatic(opts);
Pass sexstatic an options hash, and it will return your middleware!
var opts = root : __dirname + '/public' baseDir : '/' cache : 3600 showDir : true autoIndex : false humanReadable : true si : false defaultExt : 'html' gzip : false modifyFunctions : extras: ...
If opts
is a string, the string is assigned to the root folder and all other
options are set to their defaults.
opts.root
opts.root
is the directory you want to serve up.
opts.baseDir
opts.baseDir
is /
by default, but can be changed to allow your static files
to be served off a specific route. For example, if opts.baseDir === "blog"
and opts.root = "./public"
, requests for localhost:8080/blog/index.html
will
resolve to ./public/index.html
.
opts.cache
Customize cache control with opts.cache
, if it is a number then it will set max-age in seconds.
Other wise it will pass through directly to cache-control. Time defaults to 3600 s (ie, 1 hour).
opts.showDir
Turn off directory listings with opts.showDir === false
. Defaults to true.
opts.humanReadable
If showDir is enabled, add human-readable file sizes. Defaults to true.
Aliases are humanreadable
and human-readable
.
opts.si
If showDir and humanReadable are enabled, print file sizes with base 1000 instead
of base 1024. Name is inferred from cli options for ls
. Aliased to index
, the
equivalent option in Apache.
opts.autoIndex
Serve /path/index.html
when /path/
is requested.
Turn off autoIndexing with opts.autoIndex === false
. Defaults to true.
opts.defaultExt
Turn on default file extensions with opts.defaultExt
. If opts.defaultExt
is
true, it will default to html
. For example if you want a request to /a-file
to resolve to ./public/a-file.html
, set this to true
. If you want
/a-file
to resolve to ./public/a-file.json
instead, set opts.defaultExt
to
json
.
opts.gzip
Set opts.gzip === true
in order to turn on "gzip mode," wherein sexstatic will
serve ./public/some-file.js.gz
in place of ./public/some-file.js
when the
gzipped version exists and sexstatic determines that the behavior is appropriate.
opts.handleError
Turn off handleErrors to allow fall-through with opts.handleError === false
, Defaults to true.
opts.modifyFunctions
Passes an array of functions that will be performed on HTML text before it's sent to the client.
opts.extras
Passes a dictionary containing additional static, but internal files kept as strings that sexstatic will be able to serve. ex:
middleware(req, res, next);
This works more or less as you'd expect.
sexstatic.showDir(folder);
This returns another middleware which will attempt to show a directory view. Turning on auto-indexing is roughly equivalent to adding this middleware after an sexstatic middleware with autoindexing disabled.
sexstatic
command
to start a standalone static http server,
run npm install -g sexstatic
and then run sexstatic [dir?] [options] --port PORT
all options work as above, passed in optimist style.
port
defaults to 8000
. If a dir
or --root dir
argument is not passed, ecsatic will
serve the current dir.
Contribute:
Don't! Contribute back to the project that this module is forked from. This module is built for a specific use case and I'd rather not care about the parent.. Go ahead and use it for your projects though, if you'd like.
License:
MIT.