RocksonZeta / koa-validate

validate koa request params and format request params
https://github.com/RocksonZeta/koa-validate
MIT License
284 stars 32 forks source link

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

Closed hassan-jahan closed 8 years ago

hassan-jahan commented 8 years ago

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);
hassan-jahan commented 8 years ago

Seems the trick is adding multipart. app.use(require('koa-body')({ multipart: true }));

RocksonZeta commented 8 years ago

thanks for your tips