README
express-params-loader
Loader for express app.param() and router.param() methods. Extends req with object loaded from MongoDB or other source
Note: This module will only work with Node.js >= 4.0 and Mongoose >= 4.0.
Installation
npm install express-params-loader
Usage
To load object you can use custom load function or Mongoose model:
loadObject(modelOrLoadFunction, [options])
Parameters
modelOrLoadFunction{Model | Function} - Mongoose model or custom load function that returns a promise[options]{Object}[fieldName=_id]{String} - Field that is used to search for a document (only for model)[objectName]{String} -reqproperty for object loading. Default value:lowerCamelCased model namefor model and"object"for load function[passErrorToNext=true]{Boolean} - Shouldnext()function be called with error if object not found?[errorFactory]{Function} - Factory for error creation if object not found[errorMessage]{String | Function} - Error message
Examples
Mongoose model
var express = require('express');
var loadObject = require('express-params-loader');
var app = express();
app.param('id', loadObject(Book)); // Book is Mongoose model
app.get('/books/:id', function(req, res, next) {
// req.book is loaded book
});
By default object is loaded to req[<lowerCamelCased model name>]. You can change it using objectName option:
app.param('id', loadObject(Book, { objectName: 'loadedBook' }));
app.get('/books/:id', function(req, res, next) {
// req.loadedBook
});
Loader finds a single document by its _id field. You can use another field with fieldName option:
app.param('title', loadObject(Book, { fieldName: 'title' }));
app.get('/books/by-title/:title', function(req, res) {
// req.book
});
Load function
app.param('id', loadObject(function(req, id) {
// load function must return promise
return Promise.resolve({ id: 1, title: 'The Lord of the Rings' });
}));
app.get('/books/:id', function(req, res, next) {
// req.object is loaded book
});
By default object is loaded to req.object. But you can change it using objectName too:
app.param('id', loadObject(
function(req, id) {
return Promise.resolve({ id: 1, title: 'The Lord of the Rings' });
},
{ objectName: 'book' }
));
app.get('/books/:id', function(req, res, next) {
// req.book is loaded book
});
Custom default options
config.js:
loadObject.options = {
objectName: 'loadedObject'
};
app.js:
app.param('id', loadObject(Book));
app.get('/books/:id', function(req, res, next) {
// req.loadedObject
});
Tests
npm install
npm test