0.5.18 • Published 3 years ago

spritz v0.5.18

Weekly downloads
113
License
Copyleft
Repository
github
Last release
3 years ago

spritz: A pretty simple web server framework

spritz is a really simple framework for dealing with http request/response stuff

Installing

npm install spritz

Available functions

  • spritz.start(options, callback): Starts a new instance of an HTTP server based on the supplied options;

    The available options are:

    • proto: The protocol to use on our server (the currently supported protocols are: http, https, fastcgi) - defaults to http;
    • address: The network address to bind on (either an IP address or a UNIX domain socket patch) - defaults to 0.0.0.0;
    • port: The port number to bind on - defaults to 8080;
    • processes: The number of processes to pre-fork - defaults to 1;
    • mimes: An object containing the Content-type to use for file each extension - defaults to a builtin pre-initialized list.

    The options are still going to be passed to createServer() so all the node https server options are supported.

  • spritz.use(extension): Loads a certain spritz extension (i.e: middlewares, template engines, custom functions, etc...);

  • spritz.on(routePath|regExp|statusCode|hook, options, callback): Declares a spritz route or status handler and its callback;

    The first argument can be:

    • A string containing the exact path of the route. I.e.: '/about/';
    • A regular expression containing a pattern for the route. The captured groups will be available via the RegExp object as ususal. I.e.: /^\/articles\/(\d+)/;
    • A status code, in case we want to declare a status handler. I.e.: 404;
    • A hook name, started by the '#' (hash) sign, in case we want to declare a hook handler. Check the hooks section below;

The available options (for route handlers) are:

  • method - The method on what this route applies to - defaults to GET;
  • dontReadPOSTData: true - To not read the POST data from the request (in case we want to use spritz.proxy() on this request);
  • auth - A basic authentication rule. Check the basic authentication section below.

The callback will always get (request, response) as arguments.

  • spritz.auth(routePath|regExp, authRule) - Defines an authentication rule for a certain route path or regular expression. Check the basic authentication section below.

  • spritz.text(req, res, text[[, statusCode, headers, callback]]) - Returns a text string as a response for a certain request;

  • spritz.json(req, res, someObject[[, statusCode, headers, callback]]) - Returns the serialized JSON content of an object as a response for a certain request;

  • spritz.staticfile(req, res, filePath[[, statusCode, headers, callback]]) - Returns the content of a file as a response for a certain request;

  • spritz.proxy(req, res, host|url[[, port, options, callback]]) - Proxies the current request to another host or URL;

    The port argument defaults to 80;

    The available options are:

    • proto - The protocol of the request to send to the remote server - defaults to http;
    • method - The method of the request to send to the remote server - defaults to the current request method;
    • path - The path of the request to send to the remote server - defaults to the current request path;
    • headers - The headers of the request to send to the remote request - default to the current request headers;
    • timeout - A request timeout for the request to send to the remote server (in milliseconds);
    • onError - A error handler callback;
    • onTimeout - A timeout handler callback;

Hooks

The available hooks are:

  • #setroute - Called when a route is declared (synchronous);
  • #arrive - Right after a request arrives (asynchronous);
  • #readheaders - After the headers of a request are read (asynchronous);
  • #read - After a request is read (asynchronous);
  • #findroute - After finding (or not) the matching route for a request (asynchronous);
  • #beforewritehead - Before writing the headers of a response (asynchronous);
  • #beforewritedata - Bebore writing the content of a response (asynchronous);
  • #beforefinish - Before finishing to handle a request and sending its response (asynchronous);
  • #finish - After finishing to handle a request and sending its response (asynchronous).

Hooks declared in UPPERCASE (i.e.: #SETROUTE) via spritz.on() will be declared as global and will be used in every spritz server instance.

Basic authentication

Basic authentication is supported as a built-in feature. Authentication rules can be specified either via spritz.auth('/some_route', someRule) or spritz.on('/some_route', {auth: someRule}, ...).

An authentication rule should always contain a realm property and either a username/password pair or a check function which is responsible to verify if the supplied user/pass pair is valid.

Examples of authentication rules:

  • {realm: 'Authentication required', username: 'capo', password: 'dei capi'}

  • {realm: 'Authentication required', check: function(user, pass, callback) {return callback(user+' '+pass == 'capo dei capi');}}

Some code examples

var
    spritz = require('spritz');

// Start (with so many processes as CPU cores)
spritz.start({
    port: 8090,
    processes: require('os').cpus().length
});


// Listen on a static route
spritz.on('/', function(req, res){
    // Answer
    spritz.text(req, res, 'Aperol o Campari?', 200);
});

// Answer with a JSON
spritz.on('/json', function(req, res){
    spritz.json(req, res, {some: "json", other: 1});
});

// Listen on a RegExp based url pattern.
spritz.on(/^\/(x.*)/, function(req, res){
    // console.log("User asked for ", RegExp.$1);
    // Answer with a text. Status code and headers are optional
    spritz.text(req, res, 'Soda?', 200, {'content-type':'text/plain'});
});

// Listen on a static route only for POST
spritz.on('/post', {method:"POST"}, function(req, res){
    // Send a JSON with the POST arguments and files
    spritz.json(req, res, {args: req.POSTargs, files: req.POSTfiles});
});

// Listen on a static route. Tell to not read the POST data, so it will be proxied.
spritz.on('/npm/', {dontReadPOSTData:true}, function(req, res){
    // Proxy the request (both syntaxes are supported)
    spritz.proxy(req, res, "https://www.npmjs.org/");
//  spritz.proxy(req, res, "127.0.0.1", 9999, {proto: "http", timeout: 2000});
});

// Status handler
spritz.on(404, function(req, res){
    spritz.text(req, res, '404 - Cosa vuole, signore?', 404);
});
spritz.on(200, function(req, res){
    console.log("Prego...");
});


// Set a hook
spritz.on('#arrive', function(req, res, args, callback){
    console.log('Got a request to '+req.url);
    return callback();
});

// Use a (template) module
spritz.use(require('spritz-jstemplate'));
spritz.on('/use-a-template/', function(req, res){
    spritz.template(req, res, 'template.jst', {some: 'value', other: 'value'});
});

// Set an authentication rule for a specific URL pattern (pattern is optional)
//spritz.auth(/^\/pass/, {check: function(u, p, cb){ return cb(null, u=="capo" && p=="dei capi"); }});
spritz.on(/passwd/, { auth: {username: "capo", password: "dei capi"}}, function(req, res){
    // Answer with a file. Status code and headers are optional
    // console.log("Serving /etc/passwd to "+req.authUser);
    spritz.staticfile(req, res, "/etc/passwd", 200, {'content-type': 'text/plain'});
});
0.5.18

3 years ago

0.5.17

3 years ago

0.5.16

4 years ago

0.5.15

4 years ago

0.5.13

4 years ago

0.5.12

5 years ago

0.5.11

5 years ago

0.5.10

6 years ago

0.5.9

6 years ago

0.5.8

6 years ago

0.5.7

8 years ago

0.5.6

8 years ago

0.5.5

8 years ago

0.5.4

8 years ago

0.5.3

9 years ago

0.5.2

9 years ago

0.5.1

9 years ago

0.5.0

9 years ago

0.2.8

9 years ago

0.2.7

9 years ago

0.2.6

10 years ago

0.2.5

10 years ago

0.2.4

10 years ago

0.2.3

10 years ago

0.2.1

10 years ago

0.2.0

10 years ago

0.1.0

10 years ago

0.0.2

10 years ago

0.0.1

10 years ago