node.js - 快速验证器不产生验证错误

标签 node.js express express-validator

我在尝试 Express-validator v4.3.0 时遇到问题。
有一个使用 post 请求登录的基本示例。有两个参数:电子邮件和密码。下面是我的代码。

routes.js 文件:

var express = require('express');  
var router  = express.Router();  
var validator = require('./validator');

router.post('/login', [sanitize('email').trim(), 
 validator.publicRouteValidate('login')], (req, res, next) => {
  console.log(req);
}  

validator.js 文件:

'use strict';  
const { check, validationResult } = require('express-validator/check');  
const { matchedData, sanitize } = require('express-validator/filter');

module.exports = {  
  publicRouteValidate: function (method) {  
    return (req, res, next) => {  
      switch (method) {  
        case 'login':  
          check('email').isEmail().withMessage('email must be an email')  
            .isLength({min: 109}).withMessage('minimum length should be 100 characters')  
        break;  
      }  

      var errors = validationResult(req)
      console.log(errors.mapped())
      if (!errors.isEmpty()) {
         res.status(422).json({ errors: errors.array()[0].msg })
      } else {
         res.send('login')
      }
}}}  

现在,当我仅使用电子邮件进行 POST 请求时,电子邮件的值为 abc。所以我应该得到像电子邮件必须是电子邮件这样的错误。但我没有得到任何回应。那么我不知道的问题是什么?

最佳答案

您的 publicRouteValidate 函数仅创建一个验证器,但从未被调用。

发生这种情况是因为,如文档所述,check 返回一个快速中间件。此类中间件必须提供给快速路由才能完成其工作。

我建议您将该函数分成两部分:一个用于创建验证器,另一个用于检查请求是否存在验证错误,并在触及路由之前提前返回。

router.post(
    '/login',
    createValidationFor('login'),
    checkValidationResult,
    (req, res, next) => {
        res.json({ allGood: true });
    }
);

function createValidationFor(route) {
    switch (route) {
        case 'login':
            return [
                check('email').isEmail().withMessage('must be an email'),
                check('password').not().isEmpty().withMessage('some message')
            ];

        default:
            return [];
    }
}

function checkValidationResult(req, res, next) {
    const result = validationResult(req);
    if (result.isEmpty()) {
        return next();
    }

    res.status(422).json({ errors: result.array() });
}

关于node.js - 快速验证器不产生验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48760527/

相关文章:

node.js - 使用 OpenPGP.js 解密非装甲 PGP 文件

javascript - 对 Stripe 的 API 请求失败(错误 : Not a valid URL)

node.js - 快速验证未产生正确的错误

javascript - 如何改善 OpenCV 两幅图像的背景下降

javascript - 如何保持 Javascript 数组排序,而不对其进行排序

javascript - 如何使用 knex 查询对

json - Angular $http.get "Uncaught SyntaxError: Unexpected token )"没有文件引用,更别说行号了

node.js - React Js 中的重定向

javascript - 如何使用 express-validator 排除其他属性?

node.js - 使用express-validator自定义验证器验证两个字段