Skip to content

Instantly share code, notes, and snippets.

@stongo
Last active September 7, 2024 14:28
Show Gist options
  • Save stongo/6359042 to your computer and use it in GitHub Desktop.
Save stongo/6359042 to your computer and use it in GitHub Desktop.
Joi validation in a Mongoose model
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) {
...
});
})();
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);
@shashwat-idm
Copy link

@danwhitston Precisely. There's no way around it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment