assist

A set of helpers for small, modular middleware libraries

Assist

Install: npm install assist

Assist provides a few conveniences you might be used to from frameworks like express, but packaged as middleware.

Helpers include:

  • req.body
  • res.send()
  • res.json()
  • res.render()
  • res.redirect()
  • res.text()

req.body

var http = require('http');
var sw = require('simpleware');
var assist = require('assist');
 
var bodyParser = assist.body({
    url: true, // Parse urlencoded payloads 
    json: true, // And JSON 
    multipart: false, // Don't accept chunked multipart payloads 
    maxLength: 8192 // The maximum length for a payload (doesn't work with multipart right now) 
});
var middlewareStack = [bodyParser];
 
function serve(reqres) {
    var name = req.body;
    res.end('Hello ' + name);
}
 
var app = sw.mw(middlewareStack, serve);
http.createServer(app).listen(80);

res.send()

...
 
var middlewareStack = [assist.send()]; // Call it as a factory, it returns a new middeware. 
 
function serve(reqres) {
    var name = req.body;
    res.send('Hello ' + name);
 
    // The status code and Content-Type can be changed using options: 
    res.send('What? Where am I?!', {
        code: 404, // Status code 
        type: 'text/plain', // Defaults to text/html 
        charset: 'ISO-8859-1', // Defaults to utf-8, can be removed by passing `false` 
    });
}
 
...

res.json()

...
 
/*
Basically just `res.send()` with a Content-Type of application/json
and automatical stringification.
*/
var middlewareStack = [assist.json()];
 
function serve(reqres) {
    // Just drop in any object you want to send to the client 
    var r = {
        response: 'angry',
        errcode: 2319,
        messages: ['I can\'t feel my face!', 'Try using less glue.']
    };
    res.json(r); // The client needs this data, for some reason... 
 
    res.json(r, 201); // Set status codes with the second argument 
}
 
...

res.render()

...
 
// This is just a bridge that takes a render function and staples it to `res` for easy access 
// Just like json, render requires `res.send()` 
 
var helloTemplate = hogan.compile('Hello {{name}}, you are {{age}} years old');
// Args: request object, name of the template to render, data used to render the template 
function renderTemplate(reqnamedata) {
    if(name == 'hello') {
        return helloTemplate.render(data);
    }
    return '';
}
var middlewareStack = [assist.send(), assist.render(renderTemplate)];
 
function serve(reqres) {
    res.render('hello', {name: 'Harold', age: 47});
}
 
...

res.redirect()

...
 
// Just a quick way to send a Location header 
var middlewareStack = [assist.redirect()];
 
function serve(reqres) {
    // If called without the status code, it defaults to 302 (temporary redirect) 
    res.redirect('/to/a/deep/dark/scary/directory', 301);
}
 
...

res.text()

...
/*
Send content as text/plain. Supports same options as send except for type,
which is always text/plain.
Options can be replaced with a number to indicate the status code to send.
Mostly useful for making REST APIs.
*/
var middlewareStack = [assist.text()];
 
function serve(reqres) {
    var name = req.body;
    res.text('Hello ' + name);
 
    res.text('What? Where am I?!', {
        code: 404, // Status code 
        charset: 'ISO-8859-1', // Defaults to utf-8, can be removed by passing `false` 
    });
 
    // Or for short: 
    res.text('Hmm...', 404);
}
 
...