resource-router-middleware

by developit

:bicyclist: Express REST resources as middleware mountable anywhere

125 Stars 17 Forks Last release: Not found BSD 3-Clause "New" or "Revised" License 24 Commits 3 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

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');
}

});

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.