Napping Peanut Monsters

    koa-validate

    1.0.7 • Public • Published

    koa-validate

    Build Status Coverage Status NPM version Dependency Status

    NPM

    validate koa request params and format request params

    Installation

    $ npm install koa-validate --save
    

    Basic usage:

    'use strict';
    var koa = require('koa');
    var app = koa();
    var router = require('koa-router')();
    require('koa-validate')(app);
     
    app.use(require('koa-body')({multipart:true , formidable:{keepExtensions:true}}));
    app.use(router.routes()).use(router.allowedMethods());
    router.post('/signup', function * () {
        //optional() means this param may not in the params.
        this.checkBody('name').optional().len(2, 20,"are you kidding me?");
        this.checkBody('email').isEmail("your enter a bad email.");
        this.checkBody('password').notEmpty().len(3, 20).md5();
        //empty() mean this param can be a empty string.
        this.checkBody('nick').optional().empty().len(3, 20);
        //also we can get the sanitized value 
        var age = this.checkBody('age').toInt().value;
        yield this.checkFile('icon').notEmpty().size(0,300*1024,'file too large').move("/static/icon/" , function*(file,context){
            //resize image
        });
        if (this.errors) {
            this.body = this.errors;
            return;
        }
    });
    router.get('/users', function * () {
        this.checkQuery('department').empty().in(["sale","finance"], "not support this department!").len(3, 20);
        this.checkQuery('name').empty().len(2,20,"bad name.").trim().toLow();
        this.checkQuery('age').empty().gt(10,"too young!").lt(30,"to old!").toInt();
        if (this.errors) {
            this.body = this.errors;
            return;
        }
    });
    router.get('/user/:id', function * () {
        this.checkParams('id').toInt(0);
        if (this.errors) {
            this.body = this.errors;
            return;
        }
    });
    //json body,we can check it using [json path](https://github.com/flitbit/json-path)(like xpath)
    router.post('/json' , function*(){
        this.checkBody('/store/book[0]/price').get(0).eq(8.95);
        this.checkBody('#/store/book[0]/category').first().trim().eq('reference');
        if (this.errors) {
            this.body = this.errors;
            return;
        }
    })
     
    app.listen(3000);

    API

    checkBody,checkQuery,checkParams will return a Validator instance. when use require('koa-validate')(app) ,the request context will bind the method:

    • checkBody(fieldName,[transFn]) - check POST body.,transFn see json-path.it will not use json path if transFn is false.
    • checkQuery(fieldName,[transFn]) - check GET query.,transFn see json-path.it will not use json path if transFn is false.
    • checkParams(fieldName) - check the params in the urls.
    • checkFile(fieldName,[deleteOnCheckFailed]) - check the file object, if you use koa-body.this function will return FileValidator object. deleteOnCheckFailed default value is true
    • checkHeader(fieldName) - check the params in the request http header.

    Validator API

    Access validator status:

    • addError(tip) - add an error to validator errors.
    • hasError() - check if validator has errors.
    • value - the value of current validator.

    Validators:

    options,version or locale please see validator

    • optional() - the param may not in the params.if the param not exists,it has no error,no matter whether have other checker or not.
    • empty([tip]) - the params can be a empty string.
    • notEmpty([tip]) - check if the param is not empty.
    • notBlank([tip]) - check if the param is not blank,use /^\s*$/gi reg to check.
    • match(pattern,[tip]) - pattern must be a RegExp instance ,eg. /abc/i
    • notMatch(pattern,[tip]) - pattern must be a RegExp instance ,eg. /xyz/i
    • ensure(assertion, [tip], [shouldBail]) if assertion is false,the asserting failed.
    • ensureNot(assertion, [tip], [shouldBail]) if assertion is true,the asserting failed.
    • isInt([tip],[options]) - check if the param is integer.
    • isFloat([tip],[options]) - check if the param is float.
    • isLength(min,[max],[tip]) - check the param length.
    • len(min,[max],[tip]) - the abbreviation of isLength.
    • isIn(arr,[tip]) - check if the param is in the array.
    • in(arr,[tip]) - the abbreviation of isIn.
    • eq(value,[tip]) - check if the param equal to the value.
    • neq(value,[tip]) - check if the param not equal to the value.
    • gt(num,[tip]) - check if the param great then the value.
    • lt(num,[tip]) - check if the param less then the value.
    • ge(num,[tip]) - check if the param great then or equal the value.
    • le(num,[tip]) - check if the param less then or equal the value.
    • contains(str,[tip]) - check if the param contains the str.
    • notContains(str,[tip]) - check if the param not contains the str.
    • isEmail([tip],[options]) - check if the param is an email.
    • isUrl([tip],[options]) - check if the param is an URL.
    • isIp([tip]) - check if the param is an IP (version 4 or 6).
    • isAlpha([tip],[locale]) - check if the param contains only letters (a-zA-Z).
    • isNumeric([tip]) - check if the param contains only numbers.
    • isAlphanumeric([tip],[locale]) - check if the param contains only letters and numbers.
    • isBase64([tip]) - check if a param is base64 encoded.
    • isHexadecimal([tip]) - check if the param is a hexadecimal number.
    • isHexColor([tip]) - check if the param is a hexadecimal color.
    • isLowercase([tip]) - check if the param is lowercase.
    • isUppercase([tip]) - check if the param is uppercase.
    • isDivisibleBy(num,[tip]) - check if the param is a number that's divisible by another.
    • isNull([tip]) - check if the param is null.
    • isByteLength(min,max,[tip]) - check if the param's length (in bytes) falls in a range.
    • byteLength(min,max,[tip]) - the abbreviation of isByteLength.
    • isUUID([tip],[version]) - check if the param is a UUID (version 3, 4 or 5).
    • isDate([tip]) - check if the param is a date.
    • isAfter(date,[tip]) - check if the param is a date that's after the specified date.
    • isBefore(date,[tip]) - check if the param is a date that's before the specified date.
    • isCreditCard([tip]) - check if the param is a credit card.
    • isISBN([tip],version) - check if the param is an ISBN (version 10 or 13).
    • isJSON([tip]) - check if the param is valid JSON (note: uses JSON.parse).
    • isMultibyte([tip]) - check if the param contains one or more multibyte chars.
    • isAscii([tip]) - check if the param contains ASCII chars only.
    • isFullWidth([tip]) - check if the param contains any full-width chars.
    • isHalfWidth([tip]) - check if the param contains any half-width chars.
    • isVariableWidth([tip]) - check if the param contains a mixture of full and half-width chars
    • isSurrogatePair([tip]) - check if the param contains any surrogate pairs chars.
    • isCurrency([tip],[options]) - check if the param is a currency.
    • isDataURI([tip]) - check if the param is a data uri.
    • isMobilePhone([tip],[locale]) - check if the param is a mobile phone.
    • isISO8601([tip]) - check if the param is a ISO8601 string. eg.2004-05-03
    • isMACAddress([tip]) - check if the param is a MAC address.eg.C8:3A:35:CC:ED:80
    • isISIN([tip]) - check if the param is a ISIN.
    • isFQDN([tip],[options]) - check if the param is a fully qualified domain name. eg.www.google.com

    Sanitizers:

    • default(value) - if the param not exits or is an empty string, it will take the default value.
    • toDate() - convert param to js Date object.
    • toInt([tip],[radix],[options]) - convert param to integer.radix for toInt,options for isInt.
    • toFloat([tip]) - convert param to float.
    • toLowercase() - convert param to lowercase.
    • toLow() - same as toLowercase.
    • toUppercase() - convert param to uppercase.
    • toUp() - same as toUppercase.
    • toBoolean() - convert the param to a boolean. Everything except for '0', 'false' and '' returns true. In strict mode only '1' and 'true' return true.
    • toJson([tip]) - convert param to json object.
    • trim([chars]) - trim characters (whitespace by default) from both sides of the param.
    • ltrim([chars]) - trim characters from the left-side of the param.
    • rtrim([chars]) - trim characters from the right-side of the param.
    • escape() - replace <, >, & and " with HTML entities.
    • stripLow() - remove characters with a numerical value < 32 and 127, mostly control characters.
    • whitelist(value) - remove characters that do not appear in the whitelist.
    • blacklist(value) - remove characters that appear in the blacklist.
    • encodeURI() - ref mdn encodeURI
    • decodeURI([tip]) - ref mdn decodeURI
    • encodeURIComponent() - ref mdn encodeURIComponent
    • decodeURIComponent([tip]) - ref mdn decodeURIComponent
    • replace(regexp|substr, newSubStr|function) - the same as String replace
    • clone(newKey,[newValue]) - clone current value to the new key, if newValue supplied , use it. eg. this.checkBody('v1').clone('md5').md5(); then your can use this.request.body.md5.
    • encodeBase64() - encode current value to base64 string.
    • decodeBase64([inBuffer],[tip]) - decode current base64 to a normal string,if inBuffer is true , the value will be a Buffer.
    • hash(alg , [encoding]) - hash current value use specified algorithm and encoding(if supplied , default is 'hex'). ref hash
    • md5() - md5 current value into hex string.
    • sha1() - sha1 current value into hex string.

    For json path:

    • check(fn,tip,scope) - if fn return false then check failed.fn format function(value,key,requestParams):boolean
    • filter(fn,scope) - filter the value if value is array.fn format function(value,index,key,requestParams):boolean
    • get(index) - change the value to the specified index value
    • first() - get the first value!

    FileValidator:

    Validators:

    • empty() - current file field can to be a empty file.
    • notEmpty([tip]) - current file field can not to be a empty file.
    • size(min,max,[tip]) - limit the file size.
    • contentTypeMatch(reg,[tip]) - check the file's contentType with regular expression.
    • isImageContentType([tip]) - check the file's contentType if is image content type.
    • fileNameMatch(reg,[tip]) - check the file's name with regular expression.
    • suffixIn(arr,[tip]) - check the suffix of file's if in specified arr. arr eg. ['png','jpg']

    Sanitizers:

    File sanitizers are generators,we should use yield to execute them. eg. yield this.checkFile('file').notEmpty().copy('/');

    • move(target,[afterMove]) - move upload file to the target location. target can be a string or function or function*.if target end with '/' or '\',the target will be deemed as directory. target function interface:string function(fileObject,fieldName,context).this function will return a string of the target file. afterMove:it can be a function or function*.interface:function(fileObject,fieldName,context)
    • copy(target,[afterCopy]) - move upload file to the target location. target can be a string or function or function*. target function interface:function (fileObject,fieldName,context) . afterCopy:it can be a function or function*.interface:function(fileObject,fieldName,context)
    • delete() - delete upload file.

    How to extends validate:

    var Validator = require('koa-validate').Validator;
    // to do what you want to.
    //you can use this.key ,this.value,this.params,this.context,this.exists
    //use addError(tip) , if you meet error.

    Install

    npm i koa-validate

    DownloadsWeekly Downloads

    3,092

    Version

    1.0.7

    License

    MIT

    Last publish

    Collaborators

    • rocksonzeta