Skip to content

Instantly share code, notes, and snippets.

@Avi-E-Koenig
Created November 30, 2021 23:35
Show Gist options
  • Save Avi-E-Koenig/06605239ba063513b166b17355b0a6a9 to your computer and use it in GitHub Desktop.
Save Avi-E-Koenig/06605239ba063513b166b17355b0a6a9 to your computer and use it in GitHub Desktop.
Joi demo
const Joi = require('joi');
const Logger = require('../services/logger.service');
const mysqlEscapeStrings = (value, helper) => {
const validMysqlChars = /[0-9,a-z,A-Z$_]/
if (value.match(validMysqlChars)) {
return value;
}
return helper.message(`${value} contains illegal characters`)
}
//Joi.string().custom(mysqlEscapeStrings)
const validTables = [
'customers',
];
const joiValidateMiddleware = (schema, bodyType) => {
return (req, res, next) => {
const { error } = schema.validate(req[bodyType]);
if (error) {
const { details } = error;
const message = details.map(i => i.message).join(', ');
Logger.error(message);
return res.status(400).send({ error: message });
}
next();
}
}
const schemas = {
queryTable: Joi.object({
limit: Joi.number().integer().min(1).max(200).required(),
skip: Joi.number().integer().min(0).required(),
column: Joi.string().required().allow(''),
searchValue: Joi.alternatives(Joi.string(), Joi.number()).allow(
null,
''
),
table: Joi.string()
.valid(...validTables)
.required()
.messages({
'string.valid': `"a" must be of ${validTables.join(' | ')}`,
}),
}),
getFormSchema: Joi.object({
formSchema: Joi.string().required(),
}),
getButtonSchema: Joi.object({
source_table: Joi.string().required(),
}),
isAvailable: Joi.object({
table: Joi.string().required(),
column: Joi.string().required(),
value: Joi.alternatives(Joi.string(), Joi.number()).required(),
}),
login: Joi.object({
username: Joi.string().required(),
password: Joi.string().required(),
}),
};
module.exports = { joiValidateMiddleware, schemas }
//use case
router.get('/', joiValidateMiddleware(schemas.queryTable, 'query'), queryTable);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment