数据验证的重要性
构建接收外部数据的应用程序(例如,通过表单、API或CLI)时,数据验证至关重要。 我们不能依赖用户始终提供格式正确的数据。因此,需要一个验证层来防止错误并确保数据完整性。
自定义验证方法
一种方法是使用JavaScript编写自定义验证函数或类。 您可以为每种数据类型创建特定的验证器:
立即学习“Java免费学习笔记(深入)”;
class IntegerValidation { #fieldName; constructor(fieldName) { this.#fieldName = fieldName; } validate(obj) { const field = Number(obj[this.#fieldName]); if (!Number.isInteger(field)) { return new Error(`字段 ${this.#fieldName} 必须是整数。`); } }}const input = { "age": 10.3 };const ageValidation = new IntegerValidation("age");const error = ageValidation.validate(input);if (error) { return res.status(400).json({ error: error.message });}return res.status(200).json({ message: "OK" });
登录后复制
这种方法提供了完全的控制,并且验证器可以重复使用。 您可以创建一个组合验证器对象,方便维护和添加/删除规则:
class ValidationComposite { #validations = []; constructor(validations) { this.#validations = validations; } validate(obj) { for (const validation of this.#validations) { const error = validation.validate(obj); if (error) { return error; } } }}// ... (其他验证器类,例如 RequiredField, NameValidation, PasswordValidation) ...const validations = [ new RequiredField("name"), new RequiredField("age"), new RequiredField("password"), new IntegerValidation("age"), new NameValidation("name"), new PasswordValidation("password")];const validationComposite = new ValidationComposite(validations);// ... (其余代码与前例相似)
登录后复制
这种方法的缺点是需要手动编写所有验证器,比较费时。
使用验证库
为了提高效率,可以使用现成的JavaScript验证库,例如Joi、Yup和Zod。 这些库的功能类似,以下是一个使用Joi的例子:
const Joi = require("joi");const schema = Joi.object({ name: Joi.string().min(3).required(), age: Joi.number().integer().min(18).required(), password: Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')).required()});const input = { name: "Fulano", age: 24, password: "Senha@1234"};const result = schema.validate(input);if (result.error) { return res.status(400).json({ error: result.error.details });}return res.status(200).json(result.value);
登录后复制
总结
无论选择哪种方法,确保应用程序正确验证接收到的数据都至关重要,这可以避免问题并提升用户体验。 选择自定义验证还是使用库取决于项目的规模和复杂性。 对于大型项目,使用成熟的验证库通常更有效率。
以上就是使用JavaScript验证数据的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2641260.html