服务器和客户端验证器 - 库

时间:2015-07-17 13:07:39

标签: javascript node.js validation aurelia-validation

在服务器端和客户端验证对象的最佳库是什么? 我正在寻找一些更简单的东西 - 一个简单的配置文件,然后在两边都有:

var is_valid = validation(object,validationRule);

但它应该有许多验证选项,例如:

obj: A, B, C, D;
A = something;
B, C - Required;
D - Not needed/hidden


D = something:
C - Required;
B - optional/has value
A - Not needed/hidden

在客户端,我使用Aurelia框架。它有一个验证插件,但我不知道如何在服务器上使用它。这意味着,我想在服务器和客户端上使用相同的functionValidation和configValidation;

或许 - 有一个插件可以用于aurelia验证吗?

在服务器上我使用Node.js作为后端;

2 个答案:

答案 0 :(得分:0)

我也在寻找这个 - 我们没有必要复制我们的工作会很棒。

Joi看起来非常适合仅服务器端验证(它支持Walmart和PayPal并且速度非常快) - 但在客户端上使用它只有kinda possible

然后有validate.js看起来可能会同时执行这两项操作。

我打开了一个reddit question,因为我找不到太多关于此的信息。

答案 1 :(得分:0)

我能够使用此提交实现某些内容作为参考: https://github.com/aurelia/validation/commit/1b701ab

我对aurelia很陌生,所以它几乎是一个复制粘贴工作,但它确实有效,所以我想我可以为此感到高兴。这些都是打字稿,但你可以得到JS实现的一般想法。

import 'aurelia-polyfills';
import { initialize } from 'aurelia-pal-nodejs';
import { Container } from 'aurelia-dependency-injection';
import { configure as configureBindingLanguage } from 'aurelia-templating-binding';
import { configure as configureValidation, ValidationRules, Validator, Rule, ValidateResult, ControllerValidateResult } from 'aurelia-validation';
import { HandlerError } from 'api/handler.error';

class AureliaValidator {
  private validator: Validator

  constructor() {
    initialize();
    const container = new Container();
    configureBindingLanguage({ container });
    configureValidation({ container });

    this.validator = container.get(Validator);
  }

  validateObject(object: any, rules: Rule<any, any>[][]): Promise<ValidateResult[]> {
    return this.validator.validateObject(object, rules).then(results => {
      let isValid = results.every(r => r.valid);
      let errors = results.map(r => r.message).filter(m => !!m);

      if (!isValid) throw new Error(errors[0]);

      return results;
    });
  }
}

export const aureliaValidator = new AureliaValidator();

然后按如下方式使用

import { ValidationRules } from 'aurelia-validation';
import { aureliaValidator } from "validator.ts";

let foo = {
  bar: undefined
}

let rules = ValidationRules.ensure('bar').required().rules

// This will fail
aureliaValidator.validateObject(req.body, rules)