NodeJS Rest API验证问题:链式调用Validator.validate().string()报错
解决Node.js REST API链式验证的问题
先帮你梳理下代码里的问题,然后一步步修正实现你想要的链式调用效果:
1. 先解决类名与导出不匹配的基础问题
你定义的类是Checks,但最后导出的是Validator,这会导致导入时直接报错,首先得把类名和导出统一:
class Validator { constructor() { } // 后续方法写在这里 } module.exports = Validator;
2. 实现链式调用的核心逻辑
链式调用的关键是每个验证方法都要返回当前实例(this),同时我们需要在实例里保存要验证的字段和验证状态,这样后续方法才能基于同一个字段做校验。
修改后的完整验证器类:
class Validator { constructor() { this.targetField = null; // 存储要验证的目标字段 this.validationPassed = true; // 标记验证是否通过 } // 初始化要验证的字段,返回实例开启链式调用 validate(field) { this.targetField = field; this.validationPassed = true; // 每次验证重置状态 return this; } // 字符串验证方法 string() { if (typeof this.targetField !== "string") { this.validationPassed = false; } return this; // 返回this继续链式调用 } // 可扩展:必填项验证 required() { if (!this.targetField) { this.validationPassed = false; } return this; } // 获取最终验证结果 isValid() { return this.validationPassed; } } module.exports = Validator;
3. 使用示例
现在你就能像预期那样链式调用验证规则了:
const Validator = require('./validator'); const validator = new Validator(); // 验证合法字符串 const validUsername = validator.validate("emreyartas") .required() .string() .isValid(); console.log(validUsername); // 输出 true // 验证非法字段(数字) const invalidField = validator.validate(123) .string() .isValid(); console.log(invalidField); // 输出 false
额外扩展提示
你可以按照这个模式继续添加更多验证规则,比如minLength(num)、email()等,逻辑都是:检查字段是否符合规则→修改validationPassed状态→返回this保持链式调用。
内容的提问来源于stack exchange,提问作者emreyartas
相关产品推荐
相关产品推荐

