formal-mongoose
v0.3.0
Published
formal + mongoose = DRY! Define your form from your mongoose schema.
Downloads
6
Readme
Formal-mongoose
Formal + Mongoose = DRY! Simple solution to define a form with validation (and more) from a mongoose schema.
Example
var Form = require('formal-mongoose'),
model = mongoose.model('User');
var form = new Form(model, ['name.*', 'email']);
form.field({
tos: {
type: Boolean,
default: false,
validate: function(val) {
return val === true;
}
}
});
form.set({
name: {family: 'Martinez'},
'name.first': 'José Luis Chavez',
age: 12,
tos: true
});
form.validate(function (err) {
console.log(err); // missing required email, age to low
console.log(form.get('name.first.0')); // José
console.log(form.export());
});
Install
npm install formal-mongoose --save
Summary
Extend formal
to provides fast and easy way to define a form from an existing schema. The best way to don't repeat yourself!
API
For the inherited prototype see the Formal API.
new Form(schema:Object|String, fields:Array, options:Object):instance
schema
mongoose model or schema or the model namefields
array of strings path to import from the mongoose schemaoptions
object of options identical to Formal
var Form = require('formal-mongoose');
var form = new Form(mongoose.model('User'), ['username', 'pasword']);
For connect and express the alternative factory method can be used as a quick helper to create a new instance and return form.middleware() to monkey patch the request and response object.
app.post('/url',
// sames as (new Form({...})).middleware()
form(schema, ['username', 'password']),
function (req, res) {
console.log(req.form.data);
console.log(res.locals.form.username.value);
}
);
form.addPath(path:String):void
Add a path from the schema.
Notes:
Allows path to end with a wildcard * to import direct children example:
// to import name.firstname and name.lastname
form.addPath('name.*')
Test
npm test
Mocha Coveragenpm run-script coverage
On Coveralls.io
All tests are in Coffee-script, hence easy to read! Provides a great way to understand the API ;)
LICENSE
MIT