labs-scnm
8/27/2013 - 8:54 PM

Joi validation in a Mongoose model

Joi validation in a Mongoose model

var userSchema = mongoose.Schema({
  username: String,
  password: String,
	email: String,
	first_name: String,
	last_name: String,
	created: { type: Date, default: Date.now },
});
 
userSchema.methods.joiValidate = function(obj) {
	var Joi = require('joi');
	var schema = {
		username: Joi.types.String().min(6).max(30).required(),
		password: Joi.types.String().min(8).max(30).regex(/[a-zA-Z0-9]{3,30}/).required(),
		email: Joi.types.String().email().required(),
		first_name: Joi.types.String().required(),
		last_name: Joi.types.String().required(),
		created: Joi.types.Date(),
	}
	return Joi.validate(obj, schema);
}
 
module.exports = mongoose.model('User', userSchema);
var mongoose = require('mongoose');
 
mongoose.connect('mongodb://localhost/test');
 
var db = mongoose.connection;
 
db.on('error', function() {
  return console.error.bind(console, 'connection error: ');
});
 
db.once('open', function() {
  var User;
  return User = require('./user.js');
});
 
// Validate a user
(function() {
  var User = require('./user.js');
  var me = { username: 'foo' };
  var user = new User(me);
  var err = user.joiValidate(me);
  if (err) throw err;
  user.save(function(err, saved) {
    ...
  });
})();