Naboo's Podracing Misadventure
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »



    a simple, rfc 2616 compliant file streaming module for node

    node-static understands and supports conditional GET and HEAD requests. node-static was inspired by some of the other static-file serving modules out there, such as node-paperboy and antinode.


    var static = require('node-static');
    // Create a node-static server instance to serve the './public' folder
    var file = new static.Server('./public');
    require('http').createServer(function (request, response) {
        request.addListener('end', function () {
            // Serve files!
            file.serve(request, response);


    Creating a node-static Server

    Creating a file server instance is as simple as:

    new static.Server();

    This will serve files in the current directory. If you want to serve files in a specific directory, pass it as the first argument:

    new static.Server('./public');

    You can also specify how long the client is supposed to cache the files node-static serves:

    new static.Server('./public', { cache: 3600 });

    This will set the Cache-Control header, telling clients to cache the file for an hour. This is the default setting.

    Serving files under a directory

    To serve files under a directory, simply call the serve method on a Server instance, passing it the HTTP request and response object:

    var static = require('node-static');
    var fileServer = new static.Server('./public');
    require('http').createServer(function (request, response) {
        request.addListener('end', function () {
            fileServer.serve(request, response);

    Serving specific files

    If you want to serve a specific file, like an error page for example, use the serveFile method:

    fileServer.serveFile('/error.html', 500, {}, request, response);

    This will serve the error.html file, from under the file root directory, with a 500 status code. For example, you could serve an error page, when the initial request wasn't found:

    require('http').createServer(function (request, response) {
        request.addListener('end', function () {
            fileServer.serve(request, response, function (e, res) {
                if (&& (e.status === 404)) { // If the file wasn't found
                    fileServer.serveFile('/not-found.html', 404, {}, request, response);

    More on intercepting errors bellow.

    Intercepting errors & Listening

    An optional callback can be passed as last argument, it will be called every time a file has been served successfully, or if there was an error serving the file:

    var static = require('node-static');
    var fileServer = new static.Server('./public');
    require('http').createServer(function (request, response) {
        request.addListener('end', function () {
            fileServer.serve(request, response, function (err, result) {
                if (err) { // There was an error serving the file
                    console.error("Error serving " + request.url + " - " + err.message);
                    // Respond to the client
                    response.writeHead(err.status, err.headers);

    Note that if you pass a callback, and there is an error serving the file, node-static will not respond to the client. This gives you the opportunity to re-route the request, or handle it differently.

    For example, you may want to interpret a request as a static request, but if the file isn't found, send it to an application.

    If you only want to listen for errors, you can use event listeners:

    fileServer.serve(request, response).addListener('error', function (err) {
        console.error("Error serving " + request.url + " - " + err.message);

    With this method, you don't have to explicitly send the response back, in case of an error.

    Options when creating an instance of Server


    Sets the Cache-Control header.

    example: { cache: 7200 }

    Passing a number will set the cache duration to that number of seconds. Passing false will disable the Cache-Control header.

    Defaults to 3600


    Sets the Server header.

    example: { serverInfo: "myserver" }

    Defaults to node-static/{version}


    Sets response headers.

    example: { 'X-Hello': 'World!' }

    defaults to {}


    Enable support for sending compressed responses. This will enable a check for a file with the same name plus '.gz' in the same folder. If the compressed file is found and the client has indicated support for gzip file transfer, the contents of the .gz file will be sent in place of the uncompressed file along with a Content-Encoding: gzip header to inform the client the data has been compressed.

    example: { gzip: true } example: { gzip: /^\/text/ }

    Passing true will enable this check for all files. Passing a RegExp instance will only enable this check if the content-type of the respond would match that RegExp using its test() method.

    Defaults to false


    Choose a custom index file when serving up directories.

    example: { indexFile: "index.htm" }

    Defaults to index.html

    Command Line Interface

    node-static also provides a CLI.


    $ npm install -g node-static

    Example Usage

    # serve up the current directory 
    $ static
    serving "." at
    # serve up a different directory 
    $ static public
    serving "public" at
    # specify additional headers (this one is useful for development) 
    $ static -H '{"Cache-Control": "no-cache, must-revalidate"}'
    serving "." at
    # set cache control max age 
    $ static -c 7200
    serving "." at
    # expose the server to your local network 
    $ static -a
    serving "." at
    # show help message, including all options 
    $ static -h


    npm i node-static

    Downloadslast 7 days







    last publish


    • avatar
    • avatar
    • avatar