Saya menggunakan express-validator untuk pertama kalinya dan saya tidak dapat menemukan cara untuk menegaskan jika dua bidang sama (jika itu bisa dilakukan sama sekali).

Contoh: Formulir yang berisi 2 kali alamat email (satu sebagai konfirmasi standar) dikirimkan. Saya ingin memeriksa apakah bidangnya cocok.

Saya menemukan solusi sendiri yang berhasil tetapi saya bertanya-tanya apakah saya tidak hanya melakukan sesuatu yang tidak perlu. Ini kodenya (data datang melalui panggilan ajax):

//routes.js

function validator(req, res, next) {

  req.checkBody('name', 'cannot be empty').notEmpty();
  req.checkBody('email', 'not valid email').isEmail();

  var errors = req.validationErrors(); // up to here standard express-validator

  // Custom check to see if confirmation email matches.

  if (!errors) errors = [];
  if (email !== email_confirm){
    errors.push({param: 'email_confirm', msg: 'mail does not match!', value: email_confirm})
  }

  if (errors.length > 0) {
    res.json({msg: 'validation', errors:errors}); // send back the errors
  }
  else {
    // I don't want to insert the email twice in the DB
    delete req.body.email_confirm
    next(); // this will proceed to the post request that inserts data in the db
  }
};

Jadi pertanyaan saya adalah: apakah ada metode asli di express-validator untuk memeriksa apakah (email===email_confirm)? Jika tidak, apakah ada cara yang lebih baik/lebih standar untuk melakukan apa yang telah saya lakukan di atas? Saya cukup baru di node/express secara umum. Terima kasih.

4
Tommy 10 Agustus 2017, 09:55

2 jawaban

Jawaban Terbaik

Untuk mencapai tujuan ini dengan API pemeriksaan baru di validator ekspres versi 4, Anda perlu membuat fungsi validator khusus agar dapat mengakses permintaan, seperti ini:

router.post(
    "/submit",
    [
    // Check validity
    check("password", "invalid password")
        .isLength({ min: 4 })
        .custom((value,{req, loc, path}) => {
            if (value !== req.body.confirmPassword) {
                // trow error if passwords do not match
                throw new Error("Passwords don't match");
            } else {
                return value;
            }
        })
    ],
    (req, res, next) => {
        // return validation results
        const errors = validationResult(req);

        // do stuff
    });
9
Martin Reiche 6 September 2017, 16:38