gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:36:49 25 4
gpt4 key购买 nike

我在尝试 express-validator v4.3.0 时遇到问题。
有一个使用 post 请求登录的基本示例。有两个参数 email 和 password。下面是我的代码。

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。所以我应该得到像email must be an email这样的错误。但我没有得到任何回应。那么我不知道的问题是什么?

最佳答案

您的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com