Giter Site home page Giter Site logo

koa-validate's People

Contributors

neonerd avatar rocksonzeta avatar theartoflogic avatar uzoice avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

koa-validate's Issues

Let isLength have 0 has min.

If I want to ensure a parameter is 0-100 chars long with .isLength(0, 100), isn't this line messing that up?

this.notEmpty(tip);

Example: this.checkBody('markup').trim().isLength(0, 100) will always trigger isLength error when { markup: '' }. optional() didn't change anything.

calling toFloat with a number results in TypeError

When calling isFloat, the library checks whether the object is already a number. But when calling toFloat the library doesn't check that, so passing a number to v.toFloat will result in TypeError: This library (validator.js) validates strings only.

It may not be a big problem, since we should know the type of each object before validating.

Validate sub-elements

Supposed I want to validate a sub-element like:

{address:
  {street: "Millerstreet"}
}

My check

this.checkBody('address.street').notEmpty()

does not seem to work.
Is it even possible to validate sub-elements with koa-validate?
Or have I simply missed something?

how are you guys unit testing this?

I know this question may not belong here but I will ask anyway.

In order to test this I have had to use supertest, which is more of an integration test. The problem I am having is trying to figure out how to emulate the 'koa context' in order to test it because the validator is attached to the context in the middleware. I really like this validator and don't want to move to another one, so any suggestions would be great. Thanks!

Check is string

how do you check a body parameter is actually string, rather than number or null or object?

If using jsonpath, properties aren't properly marked as existing

When using jsonpath, the library still uses key in body to determine whether given key exists.

return new Validator(this, key, getValue(body,key,transFn), key in body , body);

Therefore, with a body like this:

{"foo":{"bar":"hello world"}}

Following code will return an error:

this.checkBody('/foo/bar', true).first().exist()

Because the property is marked as exists:false.

TypeError Problem: this.checkFile(...).notEmpty(...).size is not a function

I just copied the sample code in read me but got this error:

 TypeError: this.checkFile(...).notEmpty(...).size is not a function
      at Object.<anonymous> (/Applications/MAMP/htdocs/nia/test.js:21:45)
      at next (native)
      at Object.dispatch (/Applications/MAMP/htdocs/nia/node_modules/koa-router/lib/router.js:331:14)
      at next (native)
      at onFulfilled (/Applications/MAMP/htdocs/nia/node_modules/koa/node_modules/co/index.js:65:19)
      at /Applications/MAMP/htdocs/nia/node_modules/koa/node_modules/co/index.js:54:5
      at Object.co (/Applications/MAMP/htdocs/nia/node_modules/koa/node_modules/co/index.js:50:10)
      at Object.toPromise (/Applications/MAMP/htdocs/nia/node_modules/koa/node_modules/co/index.js:118:63)
      at next (/Applications/MAMP/htdocs/nia/node_modules/koa/node_modules/co/index.js:99:29)
      at onFulfilled (/Applications/MAMP/htdocs/nia/node_modules/koa/node_modules/co/index.js:69:7)

Am I missing something? Here is my final code:

'use strict';
var koa = require('koa');
var app = koa();

app.use(require('koa-body')());
app.use(require('koa-validate')());
var router = require('koa-router')();

router.get('/upload', function *(){
    this.body = '<form action="/upload" enctype="multipart/form-data" method="post">'+
    '<input type="text" name="title"><br>'+
    '<input type="file" name="file" ><br>'+
    '<input type="submit" value="Upload">'+
    '</form>'

} );

router.post('/upload', function * () {
    //optional() means this param may not in the params.

    yield this.checkFile('file').notEmpty().size(0,300*1024,'file too large').move("/static/icon/" , function*(file,context){
        //resize image
    });
    if (this.errors) {
        this.body = this.errors;
        return;
    }
    this.body = this.request.body;
});

app
    .use(router.routes())
    //.use(router.allowedMethods());

app.listen(3000);

optional doesn't work

image

koa-router writes like above picture

debuginfo
image

image

image

I request via browser
I didn't pass 'id' param, but debuginfo indicates "exists: true", In fact, it doesn't exists. So I think optional method doesn't work!?

I find koa-router docs, find this:
image

so I was confused, please give me some advice? tks

Some helpful validators

Here are some validators I use in my project that I think should belong to koa-validate.

  1. notMatch - inverse of match

  2. ensure - executes arbitrary expression. if falsey, then error. (koa-validate needs a generic validator for arbitrary expressions)

    this.checkBody('username')
      .notEmpty('Username required')
      .ensureNot(yield db.findUserByUsername(this.request.body.username), 'Username taken')
  3. ensureNot (or perhaps refute) - inverse of ensure

Implementations:

// Ensure that a string does not match the supplied regular expression.
Validator.prototype.notMatch = function(reg, tip) {
    if (this.goOn && reg.test(this.value)) {
        this.addError(tip || this.key + ' is bad format.');
    }
    return this;
};

// Ensure that `assertion`, an arbitrary value, is falsey.
Validator.prototype.ensureNot = function(assertion, tip, shouldBail) {
  if (shouldBail) this.goOn = false;
    if (this.goOn && !!assertion) {
        this.addError(tip || this.key + ' failed an assertion.');
    }
    return this;
};

// Ensure that `assertion`, an arbitrary value, is truthy.
Validator.prototype.ensure = function(assertion, tip, shouldBail) {
  if (shouldBail) this.goOn = false;
    if (this.goOn && !assertion) {
        this.addError(tip || this.key + ' failed an assertion.');
    }
    return this;
};

edit: ignore shouldBail

Can't use optional with sanitizers.

This is my code

const getValidation = function* (next) {
  this.checkQuery('limit').optional().len(1, 100).trim().toInt()
  this.checkQuery('offset').optional().len(1, 100).trim().toInt()

  if (this.errors) {
    this.status = 400
    this.body = this.errors
    return
  }
  yield next
}

router.get('/something', getValidation, Ctrl.get)

When I send GET without offset query params, It will populate error with TypeError: This library (validator.js) validates strings only. If I did something wrong just point me to correct please. Thank you.

feature request: validate an array of object

it would be nice if it possible to validate array of object, for example somebody post something like this:

[
    {
        name:'aa',
        age: 23,
               tags:['ss','2333']
    },
    {
        name:'bb',
        age: 25
    },
]

we can use those code to check each object in an array of even nested array

app.use(function*(){
    // the "$" indicate this field is in an array;
    this.checkBody('$.name').len(2,10);
    this.checkBody('$.age').len(2,10);
    this.checkBody('$.tags.$').len(1,10);

})

it would be better accept option to set error type and structure

i looked into the code ,there is a

// var opt = opt || {};

it would be useful if i can set type of this.errors( which defaults to an array ), so i don't have to modify the "this.error" object to proper handling or logging;

i remember express-validator can do that;

Exporting validator module

Hello,

While I was extending this module with a custom validator function I wanted to use the validator module.

I know that a simple npm install --save validator and require would do the job (which I did) but could be nice to export it or to make it available in the object with a variable like this.v or something else.

Is this project still actively maintained?

I am very interested in whether this project is still actively maintained, since it is the most starred validation middleware for koa. I would love to help out and develop some features, but there does not seem to be much activity on reviewing pull request.

A type confusion vulnerability can lead in json-ptr

ERROR : This affects the package json-ptr before 3.0.0. A type confusion vulnerability can lead to a when the user-provided keys used in the pointer parameter are arrays.

json-ptr is dependency package for json-path version ^0.1.3 which is again a dependency package for Koa-validate package.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.