Also available through NPM: npm install auto-crud
autocrud({
app: app, // The express application object.
collection: mongo.hoosit, // The collection object generated by the mongo driver.
name: 'hoosit', // The name of the object (this will be appended to the end of path).
path: '/api', // The root URL path that this API should be generated at.
schema: { // The json schema that should be used for validation
type: 'object',
properties: {
name: {type: 'string', required: true},
description: {type: 'string'},
rating: {type: 'integer'},
comments: {type: 'array', items: {type: 'string'}}
},
additionalProperties: false
}
});NOTE: The Autocrud object will have all the http methods callable from other objects in the server, regardless of being registered with express.
It is often that input data from a client application differs from how you want to store data in your database. So, auto-crud allows you to specify transformation functions, which will be called after the input object has been validated, but before a database insert or update.autocrud({
... // Default options
postTransform: function (body) {
if (!body.rating) body.rating = 1;
}
});Transform functions take a single parameter, which is the message body after it has been validated.
defaultTransformIf specified, this transform function will be applied to both POST and PUT operations.postTransformIf specified, this function will be used for POST operations, overriding the defaultTransform.putTransformIf specified, this function will be used for PUT operations, overriding the defaultTransform.
autocrud({
... // Default options
defaultAuthentication: function (req, res, next) {
if (req.isAuthenticated() && _.contains(req.user.roles, 'administrator')) next();
else res.send(401, 'Unauthenticated');
}
});defaultAuthenticationIf specified, this middleware will by applied to all HTTP methods on the auto-curd route.getAuthenticationIf specified, this middleware will be applied to the GET HTTP method. Overrides default.postAuthenticationIf specified, this middleware will be applied to the POST HTTP method. Overrides default.putAuthenticationIf specified, this middleware will be applied to the PUT HTTP method. Overrides default.deleteAuthenticationIf specified, this middleware will be applied to the DELETE HTTP method. Overrides default.
autocrud({
... // Default options
ownerIdFromReq: function (req) {
return new ObjectID(req.user._id);
},
ownerField: 'owner'
});It is also possible to tell autocrud that objects own themselves. This is useful for the case in which you have a user object, as a user should be able to edit itself and only itself. When an object owns itself, the POST method does not require authentication to use. This allows new users registering with your site to create an account, then login to modify it. NOTE: You cannot specify ownerSelf and ownerField at the same time. When an object owns itself, its ownerField is always its own "_id" field.
autocrud({
... // Default options
ownerIdFromReq: function (req) {
return new ObjectID(req.user._id);
}
ownerSelf: true
});NOTE: To enable object ownership the ownerIdFromReq field and either the ownerField or ownerSelf fields must be
provided. You cannot use ownerField and ownerSelf at the same time.
ownerIdFromReqA function that extracts the user id value from the request object. This is passed as the first param.ownerFieldThe name of the field in each mongo document that holds the owner id.ownerSelfIf true the object uses its own "_id" field as its ownerField.
autocrud({
... // Default options
schema: {
type: 'object',
properties: {
username: {type: 'string', required: true},
password: {type: 'string', required: true, hidden: true}
}
}
});hiddenIf a field is marked hidden it will have normal validation applied to it during POST and PUT calls, but will not be returned to the user during GET calls.
autocrud({
... // Default options
schema: {
type: 'object',
properties: {
username: {type: 'string', required: true},
password: {type: 'string', required_post: true},
modifiedTime: {type: 'string', required_put: true}
}
}
});getCalled when get by search http route is accessed.documentsThe documents that were returned as a result of the search call. Only the current page if limit and skip are provided.countThe total number of documents in the database that matched the search criteria
getIdCalled when get by id http route is accessed.idThe id of the resource accessed.documentThe document that was returned to the caller.
postdocumentThe document that was inserted to the database.
putIdidThe id of the resource accessed.documentThe changes that were made to the database document.modCountThe number of documents that were updated.
deleteIdidThe id of the resource deleted.modCountThe number of documents that were deleted.