resource-router-middleware

0.7.0 • Public • Published

resource-router-middleware

NPM Gitter

Express REST resources as middleware, mountable anywhere.

Usage

In ES6

import resource from 'resource-router-middleware';
 
export default resource({
    
    mergeParams: true,
    
    id : 'user',
 
    load(req, id, callback) {
        var user = users.find( user => user.id===id ),
            err = user ? null : 'Not found';
        callback(err, user);
    },
 
    list({ params }, res) {
        res.json(users);
    },
 
    create({ body }, res) {
        body.id = users.length.toString(36);
        users.push(body);
        res.json(body);
    },
 
    read({ user }, res) {
        res.json(user);
    },
 
    update({ user, body }, res) {
        for (let key in body) {
            if (key!=='id') {
                user[key] = body[key];
            }
        }
        res.status(204).send();
    },
 
    delete({ user }, res) {
        users.splice(users.indexOf(user), 1);
        res.status(204).send();
    }
});

In ES5

var resource = require('resource-router-middleware');
 
var users = [];
 
module.exports = resource({
    
    mergeParams: true,
    
    /** Property name to store preloaded entity on `request`. */
    id : 'user',
 
    /** For requests with an `id`, you can auto-load the entity.
     * Errors terminate the request, success sets `req[id] = data`.
     */
    load : function(req, id, callback) {
        var user = users.filter(function(user){ return user.id===id; })[0];
        if (!user) {
            callback('Not found');
        }
        else {
            callback(null, user);
        }
    },
 
    /** GET / - List all entities */
    list : function(req, res) {
        res.json(users);
    },
 
    /** POST / - Create a new entity */
    create : function(req, res) {
        var user = req.body;
        user.id = users.length.toString(36);
        users.push(user);
        res.json(user);
    },
 
    /** GET /:id - Return a given entity */
    read : function(req, res) {
        res.json(req.user);
    },
 
    /** PUT /:id - Update a given entity */
    update : function(req, res) {
        var id = req.params[this.id];
 
        for (var i=users.length; i--; ) {
            if (users[i].id===id) {
                users[i] = req.body;
                users[i].id = id;
                return res.status(204).send('Accepted');
            }
        }
        res.status(404).send('Not found');
    },
 
    /** DELETE /:id - Delete a given entity */
    delete : function(req, res) {
        var id = req.params[this.id];
 
        for (var i=users.length; i--; ) {
            if (users[i].id===id) {
                users.splice(i, 1);
                return res.status(200);
            }
        }
 
        res.status(404).send('Not found');
    }
});

Readme

Keywords

none

Package Sidebar

Install

npm i resource-router-middleware

Weekly Downloads

931

Version

0.7.0

License

BSD 3-Clause

Last publish

Collaborators

  • developit