Skip to content

vstirbu/mongoose-jsonschema

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mongoose schema to JSON schema and back

npm version Build Status Coverage Status

Motivation

This library represents a practical approach to convert the schemas used in a Mongoose model so that they can conveyed to hypermedia clients that interact with the web service.

Installation

npm install mongoose-jsonschema

Usage

Adding hypermedia controls in the Mongoose model

A Mongoose model should be augmented so that the schema options contains a JSON tranformation function:

var mongoose = require('mongoose');

var schema = new mongoose.Schema({
	...
}, {
	toJSON: {
		transform: function (doc, ret, options) {
			ret._links = {
				describedBy: {
					href: '/meta/schemas/example'
				}
			};
		}
	}
});

var model = mongoose.model('Example', schema);

Now, every time the model is converted to JSON, the representation will convey to the client the link that describes the schema of the document. The representation uses the HAL convention but other san be used as well.

Exposing the schemas

var express =  require('express'),
		mongoose = require('mongoose'),
		jsonSchema = require('mongoose-jsonschema').modelToJSONSchema;

var app = express();

app.get('/meta/schemas/:schema', function (req, res) {
	res.set({
		'Content-Type': 'application/schema+json'
	}).send(jsonSchema(mongoose.model(req.params.schema))).end();
});

API

modelToJSONSchema(model, options) ⇒ Object

Kind: Exported function
Returns: Object - JSONSchema

Param Type Description
model object Mongoose model to be converted
options object Options for customising model conversion
options.reserved Array.<string> | object Model properties found in the array are not included in the schema or map of properties to be converted
options.reserved.property boolean Include/do not include model property into schema