ExpressIntermediate
Express Input Validation (Zod)
Zod schema, request validation, error messages — Express-এ input validation বাংলায়।
10টি অংশবাংলা ভাষায়
Input validation user-এর পাঠানো data যাচাই করা। Invalid data হলে 400 respond করা। Beauty tool হলো Zod (বিল্ট-ইন TypeScript types)।
Zod Setup
npm install zodvalidators/userValidator.jsjavascript
javascript
const { z } = require("zod");
const createUserSchema = z.object({
name: z.string().min(2, "নাম কমপক্ষে 2 অক্ষর").max(50),
email: z.string().email("সঠিক email দিন"),
age: z.number().int().min(18).max(120).optional(),
password: z.string().min(6, "পাসওয়ার্ড কমপক্ষে 6 অক্ষর"),
});
const updateUserSchema = z.object({
name: z.string().min(2).max(50).optional(),
age: z.number().int().min(18).max(120).optional(),
});
module.exports = { createUserSchema, updateUserSchema };Validation Middleware
middleware/validate.jsjavascript
javascript
const validate = (schema) => (req, res, next) => {
const result = schema.safeParse(req.body);
if (!result.success) {
const errors = result.error.issues.map(issue => ({
field: issue.path.join("."),
message: issue.message,
}));
return res.status(400).json({ error: "Validation failed", errors });
}
req.body = result.data; // cleaned data
next();
};
module.exports = validate;Use in Route
const validate = require("../middleware/validate");
const { createUserSchema } = require("../validators/userValidator");
router.post("/", validate(createUserSchema), async (req, res) => {
const user = await User.create(req.body);
res.status(201).json(user);
});Invalid request examplebash
bash
POST /api/users
{ "name": "A", "email": "bad-email" }
Response:
{
"error": "Validation failed",
"errors": [
{ "field": "name", "message": "নাম কমপক্ষে 2 অক্ষর" },
{ "field": "email", "message": "সঠিক email দিন" }
]
}Zod & TypeScript
Zod TypeScript-এর সাথে দারুণ কাজ করে — schema থেকে automatically type inference পাওয়া যায় (z.infer), তাই type safety নিশ্চিত।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।