Performance: Validation with Joi
This affects the server response time and initial API request processing speed.
import * as Joi from 'joi'; const schema = Joi.object({ username: Joi.string().min(3).max(30).required(), password: Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')).required(), email: Joi.string().email().required(), profile: Joi.object({ age: Joi.number().min(0).max(120), bio: Joi.string().max(500) }).required() }); // Validate asynchronously to avoid blocking const result = await schema.validateAsync(request.body);
import * as Joi from 'joi'; const schema = Joi.object({ username: Joi.string().min(3).max(30).required(), password: Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')).required(), email: Joi.string().email().required(), profile: Joi.object({ age: Joi.number().min(0).max(120), bio: Joi.string().max(500) }).required() }); // Validate on every request synchronously const result = schema.validate(request.body);
| Pattern | CPU Usage | Event Loop Blocking | Response Time Impact | Verdict |
|---|---|---|---|---|
| Synchronous Joi.validate() | High | Yes, blocks event loop | Increases by 10-50ms per request | [X] Bad |
| Asynchronous Joi.validateAsync() | Moderate | No, non-blocking | Minimal impact | [OK] Good |
Joi in a NestJS application?username?Joi.string()..required() ensures the field must be present and not empty.const schema = Joi.object({ age: Joi.number().min(18).required() });
const result = schema.validate({ age: 16 });result.error contain?age to be a number, at least 18, and required.age: 16, which is less than the minimum 18.result.error contains a message about age being too low.const schema = Joi.object({
email: Joi.string().email,
password: Joi.string().min(8).required()
});email method in Joi is a function and must be called with parentheses: email().Joi.string().email without parentheses, which is incorrect and will cause an error.name (required string), age (optional number, minimum 0), and email (required valid email). Which Joi schema correctly applies these rules?name is required string, age is number with min 0 (optional by default), email is required email string.Pass the test and this pattern moves unknown