第 4 步即可使用 Joi 简化验证 🚀
告别冗长的 `if-else` 验证块!使用 **Joi** npm 包,只需 **4 个简单步骤** 即可实现干净高效的验证。
在深入了解这些步骤之前,让我们先看看如何使用 if-else 编写验证。
const validateCreateCareer = (req, res, next) => { const { title, description, teamType, location, skills, salary, jobLevel, postingDate, employmentType, experienceRequired, remote } = req.body; if (!title) { return res.status(400).json({ status: 'error', message: 'Title is required.' }); } if (!description) { return res.status(400).json({ status: 'error', message: 'Description is required.' }); } if (!teamType || !['Engineering', 'Marketing', 'Sales'].includes(teamType)) { // Example teamType values return res.status(400).json({ status: 'error', message: 'Invalid or missing teamType.' }); } if (!Array.isArray(location) || location.some((loc) => typeof loc !== 'string')) { return res.status(400).json({ status: 'error', message: 'Location must be an array of strings.' }); } if (!Array.isArray(skills) || skills.some((skill) => typeof skill !== 'string')) { return res.status(400).json({ status: 'error', message: 'Skills must be an array of strings.' }); } if (salary !== undefined && typeof salary !== 'number') { return res.status(400).json({ status: 'error', message: 'Salary must be a number.' }); } next(); // Proceed if all validations pass }; export default validateCreateCareer;
if-else 验证的缺点
💣 冗长:代码变得冗长且重复。
💣 容易出错:错过边缘情况或拼写错误的风险更高。
💣维护:随着需求的增长,维护或扩展变得更加困难。
现在让我们看看
🛠️ 步骤 1:安装 Joi 包
运行以下命令安装 Joi:
npm i joi
🛠️ 第 2 步:配置 Joi 验证中间件
创建可重复使用的验证中间件来简化您的验证过程:
import Joi from 'joi'; import { Request, Response, NextFunction } from 'express'; const validate = (schema: Joi.ObjectSchema
🛠️ 步骤 3:创建 Joi 验证器文件
在专用文件中定义验证模式:
createCareerSchema: Joi.object().keys({ title: Joi.string().required(), description: Joi.string().required(), teamType: Joi.string().valid(...Object.values(TeamType)).required(), location: Joi.array().items(Joi.string()).required(), skills: Joi.array().items(Joi.string()).required(), salary: Joi.number(), jobLevel: Joi.string().valid("Junior", "Mid-Level", "Senior").required(), postingDate: Joi.date().iso().required(), employmentType: Joi.string().valid("Full-Time", "Part-Time", "Contract").required(), experienceRequired: Joi.number().integer().min(0).required(), remote: Joi.boolean().default(false), }), }; export default careersSchema;
🛠️ 步骤 4:在你的路线中使用它
在您的 Express 路由中集成验证中间件:
import { validate } from './middleware/validate'; import careersSchema from './validators/careersSchema'; import CareersController from './controllers/CareersController'; router.patch( "/careers/:id/update", validate(careersSchema.updateCareerSchema), CareersController.updateCareer ); router.post( "/careers", validate(careersSchema.createCareerSchema), CareersController.createCareer ); export default router;
✅ 测试一下!
尝试发出缺少或无效字段的 API 请求。中间件将自动处理错误并返回用户友好的响应。🎉

通过这 4 个步骤,您的验证过程将变得简洁、高效且易于维护。祝您编码愉快!🚀