express-crud

Easy CRUD for express apps!

Usage no npm install needed!

<script type="module">
  import expressCrud from 'https://cdn.skypack.dev/express-crud';
</script>

README

express-crud NPM version Downloads Build Status Coveralls Status

Easily route a resource's crud methods to express apps!

Example

Here's a User resource that exposes some CRUD methods:

module.exports = {
  create:   function(query, model, cb){
  ....
  cb(null, ["create"]); //first argument is response status, second is array of response data
  },
  delete:   function(id, query, cb){},
  read:     function(query, cb){},
  readById: function(id, query, cb){},
  update:   function(id, query, model, cb){}
};

Here's how you add the routes to your express app:

var app = require('express')();
var User = require('./models/User');

require('express-crud')(app);

app.crud('users', User);

Here's how you add the routes to your express app using a formatted response object:

var app = require('express')();
var User = require('./models/User');
var opts = {
    formatResponse: function(result) {
        return {
            timestamp: Date.now(),
            payload: result
        };
    }
};

require('express-crud')(app, opts);

app.crud('users', User);

Now your express app has the following routes:

DELETE /users/:id
GET /users
GET /users/:id
POST /users
PUT /users/:id

Changing the param name

You can change the param name by specifying it at the end of your route:

app.crud('users/:userId', User);

Now your express app has the following routes:

DELETE /users/:userId
GET /users
GET /users/:userId
POST /users
PUT /users/:userId

With some middleware

var authorizeMiddleware = function(req, res, next){//arity matters!
  if(req.query.username !== 'foo')return next(new Error('user not foo!'));
  next();
};
var fooMiddleware = function(req, res, next){next();};

app.crud('users', authorizeMiddleware, fooMiddleware, User);

Restrict access to resources by user

app.crud('settings/:settingId', authorizeMiddleware, function(req, res, next){
  //ensure that the resource get's the username.
  req.query.username = req.user.name;
  next();
}, SettingsResource);

Format your response

With any path

app.crud('/any/old/path/for/users', User);

Status Codes

When you call the callback given to resource methods without an error object as the first arg, express-crud will use either 204 or 200 depending on the context. If you wish to pass a non 2xx status code up to your application the preferred way is to assign a status property to your error object I.E. cb({status: 404}).