2017-10-30 9 views
0

私は送信要求を処理するポストルートを定義しています。私は私のuser.jsのルートに次のコードを書かれている:TypeError:req.checkBodyは関数ではありません。エクスプレスバリデーターは機能せず、検証は失敗しますか?

var express = require('express'); 
var router = express.Router(); 
var multer = require('multer'); 
var upload = multer({dest:'./uploads'}); 

router.post('/register', upload.single('profileimage'), function(req, res, next) { 
    var name = req.body.name; 
    var email = req.body.email; 
    var username = req.body.username; 
    var password = req.body.password; 
    var password2 = req.body.password2; 
    if(req.file){ 
     var profileImage = req.file.filename; 
    } 
    else{ 
     var profileImage = 'noimage.jpg'; 
    } 

    //form validation 

    req.checkBody('name', 'Name feild is reqiured').notEmpty(); 
    req.checkBody('email', 'Email feild is reqiured').notEmpty(); 
    req.checkBody('email', 'Email feild is reqiured').isEmail(); 
    req.checkBody('username', 'Name feild is reqiured').notEmpty(); 
    req.checkBody('password', 'PasswordUser feild is reqiured').notEmpty(); 
    req.checkBody('password2', 'Password donot match').equals(req.body.password); 
    //check Errors 
    var errors = req.validationErrors(); 
    if(errors){ 
     res.render('register', { 
      errors: errors 
     }); 
     console.log(errors); 
    } 
    else{ 
     Console.log('No Errors'); 
    } 

}); 

私app.jsは表現-バリすでに以下のようにそれに定義されているがあります。

var expressValidator = require('express-validator'); 
var app = express(); 
app.use(expressValidator({ 
    errorFormatter: function(param, msg, value){ 
     var namespace = param.split('.') 
     , root = namespace.shift() 
     , formParam = root; 

     while(namespace.length) { 
      formParam += '[' + namespace.shift() 
     } 
     return{ 
      param: formParam, 
      msg: msg, 
      value: value 
     }; 
    } 
})); 

エラーはTypeError:req.checkBody関数ではありませんは、検証ボタンをクリックするたびにブラウザに表示されます。コードに欠けているものや必要な修正をお知らせください。私はシンプルなアプリ、これに応じて、あなたのコードを書き換えるしようと作ったすでに下記を経て

リンクを述べたが、それは私のために動作しませんでした。: TypeError: req.checkBody is not a function

+0

あなたのアプリのエントリーポイントはどのファイルですか? –

+0

app.jsファイルにルータを作成し、それをusers.jsに渡します。 2番目のexpress()オブジェクトを作成しているので、app.user(expressValidator())はuser.jsで動作しません。なぜなら、それはapp.jsの明示的なオブジェクトだからです。 – donquixote

+0

@donquixote私は以下の2行を追加し、 .js: 'var expressValidator = require( 'express-validator'); router.use(expressValidator()) ' しかし、ウェブページにエラーは表示されませんが、再読み込みを続けます。また、Webページに検証メッセージが表示されません。 – aman

答えて

0

、それは

アプリ正常に動作します.jsファイル

var express = require('express'); 
var expressValidator = require('express-validator'); 
var app = express(); 
var router = express.Router(); 
var bodyParser = require("body-parser"); 
var cors = require('cors'); 

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 
app.use(cors()); 

app.use(expressValidator({ 
    errorFormatter: function(param, msg, value){ 
     var namespace = param.split('.') 
     , root = namespace.shift() 
     , formParam = root; 

     while(namespace.length) { 
      formParam += '[' + namespace.shift() 
     } 
     return{ 
      param: formParam, 
      msg: msg, 
      value: value 
     }; 
    } 
})); 
// I pass app to the users.js file, because express validator I've assigned 
// to this express app instance 
require('./users')(app); 

app.listen(3300); 

body-parserとcorsをスキップできます。 users.jsファイルは

急行ルータがインスタンス化されなければならないとあなたが新しい特急オブジェクトにルータを作成する場合は、特急との接続を持っていないので、私は、(「/登録」)app.post使用
module.exports = function (app) { 
    app.post('/register', function(req, res, next) { 
     req.checkBody('name', 'Name feild is reqiured').notEmpty(); 
     var errors = req.validationErrors(); 
     if(errors){ 

      res.status(400).json({"errors": errors}); 
     } 
     else{ 
      Console.log('No Errors'); 
      res.status(200).json({"foo": "bar"}); 
     } 
    }); 
}; 

のように見えますバリデーターは、app.jsファイルで作成した他のエクスプレスオブジェクトに割り当てられていたためです。

関連する問題