Skip to content

Instantly share code, notes, and snippets.

@Bon2xl
Created September 4, 2021 17:17
Show Gist options
  • Save Bon2xl/44c3e7b0a435dad35cfb5bceb7bbe491 to your computer and use it in GitHub Desktop.
Save Bon2xl/44c3e7b0a435dad35cfb5bceb7bbe491 to your computer and use it in GitHub Desktop.
Joi validation and middleware
From: https://gist.github.com/stongo/6359042
Commented By: geraldanosike commented on Jul 24
// ********************************
// User Model
// ********************************
const mongoose = require('mongoose')
const Joi = require('joi')
const userSchema = new mongoose.Schema({
email: {
type: String,
required: [true, 'Please enter a email'],
unique: true,
lowercase: true,
},
password: {
type: String,
required: [true, 'Please enter a password'],
minlength: 8,
},
})
const User = mongoose.model('user', userSchema)
const validateUser = (user) => {
const schema = Joi.object({
email: Joi.string().email().min(5).max(500).required(),
password: Joi.string().min(8).max(1024).required(),
})
return schema.validate(user)
}
module.exports = {
User,
validateUser,
}
// ********************************
// Validate Middleware
// ********************************
module.exports = (validator) => {
return (req, res, next) => {
const { error } = validator(req.body)
console.log('error: ', error)
if (error) {
return res.status(400).send(error.details[0].message)
}
next()
}
}
// ********************************
// Auth Route
// ********************************
const { validateUser } = require('../models/User')
const validateMiddleWare = require('../middleware/validate')
const authController = require('../controllers/authController')
router.post('/signup', [validateMiddleWare(validateUser)], authController.signup_post)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment