Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

node-http-server

Package Overview
Dependencies
Maintainers
1
Versions
40
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-http-server

A very simple and fast http server for node, bash, and spawnable from C, Python etc. It is lightweight and great for embedded solutions as well as everyday development or public facing apps.

  • 5.0.1
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
2K
decreased by-43.46%
Maintainers
1
Weekly downloads
 
Created
Source

Node http server


Simple to use stand alone node HTTP Server you can spin up from node apps, bash scripts, the commandline, C or python apps etc.

npm install node-http-server

node-http-server stats

npm info : See npm trends and stats for node-http-server
node-http-server npm version supported node version for node-http-server total npm downloads for node-http-server monthly npm downloads for node-http-server npm licence for node-http-server

GitHub info :
node-http-server GitHub Release GitHub license node-http-server license open issues for node-http-server on GitHub

Package Quality :
node-http-server Package Quality

writing a node http server

DO NOT USE launch=now as a commandline argument for a node server. This will result in launching 2 servers, the one you specify with the arguments passed and then the one the node app launches too.

The below table shows all of the methods available on the server when you require this module.


    var server=require('node-http-server');

If you want to create a custom Server or extend the Server Class you can require just the server class.


    var Server=require('node-http-server').Server;

Server Methodparamsdescription
deployconfig obj (optional)starts the server. if a config object is passed it will shallow merge it with a clean instantion of the Config class
onRequestrequest objcalled when request recieved
beforeServerequest obj, response obj, body obj, encoding objcalled just before data is served to the client
afterServerequest objcalled once data has been fully sent to client
Configconfig object (optional)This is a refrence to the Default Config class. Use it to generate a complete config file based off of the default values and arguments passed in when launching the app. Will perform a shallow merge of default values and passed values ig config object passed.
ServernoneThis is a refrence to the Server Class. Use it to start multiple servers on different ports or to extend the node-http-server.

Examples

To see the server in action run npm start from the root of this repo and then visit localhost:8000.

Detailed examples can be found in the example folder The basic example directory is static file servers and the advanced directory has dynamic server side rendering examples including a benchmark example.


    var server=require('node-http-server');

    server.deploy(
        {
            port:8000,
            root:'~/myApp/'
        }
    );


Custom configuration


    var server=require('node-http-server');

    var config=new server.Config;
    config.errors['404']    = 'These are not the files you are looking for...';
    config.contentType.mp4  = 'video/mp4';
    config.port             = 8005;
    config.verbose          = true;
    config.root             = '~/myApp/'

    server.deploy(config);


Multiple domains or subdomains


    var server=require('node-http-server');

    var config={
        port:8010,
        root:__dirname + '/www/myApp/',
        domain:'myapp.com',
        domains:{
            'a.myapp.com':__dirname+'/www/a-myApp/',
            'yourapp.com':__dirname+'/someFolder/yourApp/'
        }
    }

    server.deploy(config);    

Template filling


    var server=require('../../server/http.js');

    server.beforeServe=beforeServe;

    function beforeServe(request,response,body,encoding){
        //only parsing html files for this example
        if(response.getHeader('Content-Type')!=server.config.contentType.html){
            return;
        }

        var someVariable='this is some variable value';

        body.value=body.value.replace('{{someVariable}}',someVariable);
    }

    server.deploy(
        {
            port:8000,
            root:__dirname+'/appRoot/'
        }
    );

Commandline / terminal / bash / script use

launch is an argument that specifies to launch the server now with the provided arguments and defaults

node ~/git/node-http-server/server/http.js root=~/myApp/ port=9999 launch=now

you can specify any of the variables from the config example above which use args. The order does not matter.

node ~/git/node-http-server/server/http.js root=~/myApp/ port=8888 verbose=true launch=now

commandline arguments will also work when starting a node server

node myServer.js verbose=true
argdefaultvaild values
verbosefalsetrue or false
portdefaults.portany valid port on the machine
rootdefaults.rootany valid path on the machine
domainlocalhostany domain which route to the machines ip. This can be done publicly or locally, as in the hosts file. 0.0.0.0 will accept requests from *** ANY *** domain pointed at the machine.
indexindex.htmlany file name
noCachetruetrue or false

Default Node HTTP Server Configuration


    {
        verbose     : (args.verbose=='true')||false,
        port        : args.port||defaults.port,
        root        : args.root||defaults.root,
        domain      : args.domain||defaults.domain,
        log         : false,
        logFunction : serverLogging,
        domains   : {
            /*******************\
             * domain  : /that/domains/root/dir
             *
             * for sub domains, specify the whole host i.e. "my.sub.domain"
             * you may need to edit your hosts file, cnames or iptable
             * domain or my.domain etc. goes to 127.0.0.1 for local development
             * *****************/
        },
        server      : {
            index   : args.index||defaults.index,
            noCache : args.noCache=='false' ? false : true,
            timeout : 30000 //30 second timeout
        },
        contentType : {
            html    : 'text/html',
            css     : 'text/css',
            js      : 'text/javascript',
            json    : 'application/json',
            txt     : 'text/plain',
            jpeg    : 'image/jpeg',
            jpg     : 'image/jpeg',
            png     : 'image/png',
            gif     : 'image/gif',
            ico     : 'image/x-icon',
            appcache: 'text/cache-manifest'
        },
        restrictedType: {

        },
        errors:{
            headers : {
                'Content-Type' : 'text/plain'
            },
            404: '404 MIA',
            415: '415 File type not supported',
            403: '403 Access Denied',
            500: '500 {{err}}'
        }
    };

keydescription
verbosedisplay detailed info about what server is doing via terminal.
portthe port on which the server should run
rootthe absolute path to the root dir for the domain
domainthe server domain. To accept incoming requests for ANY Applicable Domain use 0.0.0.0 this will allow any request that is pointed at this machine on the specified port to use this server config.
logfull path to log file, if specified and the file is not present, it will be created, however the dir must be there. Example path : /tmp/server.log It is recommended that you timestamp this file name with a time stamp like : '~/serverLogs/domain-'+new Date().getTime()+'.log' this will create a new log file each time the server is started/restarted/reboot etc...
logFunctionthe default function appends timestamps to the headers object and logs as JSON in the log file. You can assign your own function here as well. It should accepts a javascript Object as the first argument.
domains.*this is a mapping of hostname to path. It can be used for multiple different domains, or for subdomains.
server.indexthe default file to look for in a dir. if not found a 404 will be displayed
server.noCacheshould the server prevent caching
server.timeoutthe amount of time allowed for no activity on a connection before it is closed.
contentType.*mapping of file extension to header Content-Type value.
restrictedType.*extensions to which access will be denied.
errors.headersthese are the headers that will automatically be applied to all error responses. You can add custom headers per error in the beforeServe function
errors.*error headers and error strings, these can be anything you like from html to text etc. The 500 error will replace {{err}} in the specified value with the actual error message from the server.
config.domains.*

Use this object for sub domains, or hosting multiple domains on the same port. Specify the whole host i.e. "my.sub.domain.com" or "amazing-domain.com".

You may need to edit your hosts file, cnames, iptable to get this to work on your server or development environment.

You can add the below example to your hosts file to run some of the examples from the /example/basic directory which use multiple domains on occasion.

#node-http-server examples
127.0.0.1 myapp
127.0.0.1 a.myapp
127.0.0.1 yourapp.com

   var server=require('node-http-server');

   var config={
       port:8000,
       root:__dirna\me+'/appRoot/',
       domain:'myapp',
       domains:{
            //subdomain
            'a.myapp':__dirname+'/appSubDomainRoot/',
            //totally different domain, but also on port 8000
            'yourapp.com':__dirname+'/appOtherDomainRoot/'
       }
   }

   server.deploy(config);


Extending the Server

If you wish to make a reusable Server Class of your own to share or for some internal use you can always extend the server class and make your own module too.


    var os=require('os');
    var Server=require('node-http-server').Server;

   //MyAwesomeServer inherits from Server
   MyAwesomeServer.prototype = new Server;
   //Constructor will extend Server
   MyAwesomeServer.constructor = MyAwesomeServer;

   function MyAwesomeServer(){
        //extend with some stuff your app needs,
        //maybe npm publish your extention with node-http-server as a dependancy?
        Object.defineProperties(
            this,
            {
                IP:{
                    enumerable:true,
                    get:getIP,
                    //not settable so just return the IP
                    set:getIP
                }
            }
        );

        //locking down Class structure
        //no willy nilly cowboy coding
        Object.seal(this);

        function getIP(){
            var networkInterfaces = os.networkInterfaces();
            var serverIPs={};
            var interfaceKeys=Object.keys(networkInterfaces);
            for(var i in interfaceKeys){
                serverIPs[
                    interfaceKeys[i]
                ]={};

                var interface=networkInterfaces[
                    interfaceKeys[i]
                ];

                for(var j in interface){
                    serverIPs[
                        interfaceKeys[i]
                    ][
                        interface[j].family
                    ]=interface[j].address;
                }
            }

            return IPs;
        }
    }

    module.exports=MyAwesomeServer;


    var AwesomeServer=require('MyAwesomeServer');

    var server=new AwesomeServer;

    server.deploy(
        {
            port:8000,
            root:'~/myAwesomeApp'
        }
    );

    console.log(server.IP);

Keywords

FAQs

Package last updated on 03 Feb 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc