2017-09-02 9 views
1

Expressデータの検証にexpress.jsを使用し始めましたが、バージョン4.0で導入された新しいチェックAPIでリクエスト本体にアクセスする際に問題が発生しました。 0。古いバージョンではエクスプレスバリデーターv4のチェック機能でのアクセス要求本体

が、あなたは、単にどこか身体-パーサ後にapp.jsにミドルウェアとして明示-バリデータを追加しました:

// ./app.js 
const bodyParser = require("body-parser"); 
const expressValidator = require("express-validator"); 

const index = require("./routes/index"); 

const app = express(); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(expressValidator()); 

をその後、私のインデックスルートで、私は、最終的なコールバック関数内のフィールドをチェックすることができますpostメソッドのこの例のように

// ./routes/index.js 
const express = require("express"); 
const router = express.Router(); 

router.post("/submit", (req, res, next) => { 
    // check email 
    req.check('email','Invalid email address').isEmail() 
    // check if password is equal to password confirmation 
    req.check('password', 'Invalid password') 
    /* Access request body to compare password 
    field with password confirmation field */ 
    .equals(req.body.confirmPassword) 

    // get errors 
    const errors = req.validationErrors(); 

    // do stuff 
}); 

、私は簡単に自分のパスワードフィールドの値と、私のフォームのパスワードの確認フィールドが等しいかどうかをチェックすることができます。しかし、バージョン4以来、彼らはあなたのルーターファイルに直接エクスプレスバリデーターをロードし、postメソッドの最後のコールバックの前に関数の配列としてチェック関数を渡すことを要求する新しいAPIを持っています:

// ./routes/index.js 
const express = require("express"); 
const router = express.Router(); 
const { check, validationResult } = require("express-validator/check"); 

router.post(
    "/submit", 
    [ 
     // Check validity 
     check("email", "Invalid email").isEmail(), 
     // Does not work since req is not defined 
     check("password", "invalid password").isLength({ min: 4 }) 
     .equals(req.body.confirmPassword) // throws an error 
    ], 
    (req, res, next) => { 
    // return validation results 
    const errors = validationResult(req); 

    // do stuff 
}); 

reqが定義されていないため、これは機能しません。だから私の主張は:check()チェーン内のリクエストオブジェクトにアクセスして、2つの異なるフィールドを新しいexpress-validator APIと比較するにはどうすればいいですか?ありがとうございました!

答えて

7

しばらくお待ちいただいた後、カスタムバリデーターを使用してこれを実現する方法を見つけました。

+0

私は 'req'をv4のカスタムバリデータに渡すことを、このユースケースのために正確に行っています:) – gustavohenke

関連する問題