Rails-style implementation of strong parameters. It supports Express, Koa and also can be used as standalone. The middleware adds the parameters
object to the Express request (or ctx.parameters
for Koa context) which returns an object, built from query string
, request body
and route params
data. The returned object has some useful methods allows for data requiring
and filtering
.
The implementation of strong parameters was previously forked from koa-strong-params but now has it's own implementation. Along with this change only
, except
and merge
methods have been dropped from the API as they do not exist in Rails Strong Parameters API.
Install the npm package.
npm install strong-params --save
var express = require('express')
var params = require('strong-params')
app.use(params.expressMiddleware())
var koa = require('koa')
var params = require('strong-params')
var app = new koa()
app.use(params.koaMiddleware())
app.use(function (req, res, next) {
var params = req.parameters
})
app.use(function (ctx, next) {
var params = ctx.parameters
})
var Parameters = require('strong-params').Parameters
var params = Parameters({
id: '13',
name: 'Bob',
age: '13',
hobbies: ['skydiving', 'football', 'photographing'],
address: {
country: 'US',
street: '261 West'
},
contacts: [
{
type: 'e-mail',
value: '[email protected]'
}, {
type: 'mobile',
value: '+123987456'
}
]
})
// All available params
params.all()
// -> { id: '13', name: 'Bob', age: '13', hobbies: ['skydiving', 'football', 'photographing'], address: { country: 'US', street: '261 West' }, contacts: [{ type: 'e-mail', value: '[email protected]' }, { type: 'mobile', value: '+123987456' }] }
// Only selected params
params.permit('name', 'age').value()
// -> { name: 'Bob', age: '13' }
params.permit('id', 'name', {hobbies: []}).value()
// -> { id: '13', name: 'Bob', hobbies: ['skydiving', 'football', 'photographing'] }
params.permit('id', 'name', {contacts: []}).value()
// -> { id: '13', name: 'Bob', contacts: [] }
params.permit('id', 'name', {contacts: ['type', 'value']}).value()
// -> { id: '13', name: 'Bob', contacts: [{ type: 'e-mail', value: '[email protected]' }, { type: 'mobile', value: '+123987456' }] }
// All params of a sub-object
params.require('address').all()
// -> { country: 'US', street: '261 West' }
// All params of a sub-object
params.require('contacts').permit('type', 'value').value()
// -> [{ type: 'e-mail', value: '[email protected]' }, { type: 'mobile', value: '+123987456' }]
// ParameterMissingError
try {
params.require('missingKey')
} catch(err) {
err instanceof ParameterMissingError // -> true
err instanceof Error // -> true
}
Look Rails Strong Parameters specification for more information.
Please follow Contributing