express-validator 不检查任何东西

express-validator doesn't check anything

这是我的代码。我想检查名称是否按字母顺序排列并且有超过 2 个字符,但此代码不会产生任何错误。

const {body, validationResult} = require('express-validator');

function nameValidation(req, res, next){
    body('name').trim().isLength({ min: 1 }).withMessage('Name empty.')
    .isLength({ min: 3 }).withMessage('Name must contain min 2 letters.')
    .isAlpha().withMessage('Name must be alphabet letters.');
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }

    next();
}

确实如此,因为你在post方法获取到请求数据后进行了验证。 您需要做的是先进行验证。

app.post(
    '/users',
    body('name').trim().isLength({ min: 1 }).withMessage('Name empty.')
    .isLength({ min: 3 }).withMessage('Name must contain min 2 letters.')
    .isAlpha().withMessage('Name must be alphabet letters.'),
    (req, res) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
          return res.status(400).json({ errors: errors.array() });
        }
        else{
            res.send('Success')
        }
    },
  );

已更新

根据您的评论,我更新了我的答案以使用该中间件作为参数

const express = require('express')
const app = express()
const port = 3000

app.use(express.json())

const { check, validationResult } = require('express-validator');

const validateUser = [
    check('name')
        .trim()
        .escape()
        .not()
        .isEmpty()
        .withMessage('User name can not be empty!')
        .bail()
        .isLength({ min: 3 })
        .withMessage('Minimum 3 characters required!')
        .bail()
        .isAlpha()
        .withMessage('Name must be alphabet letters.')
        .bail(),
    check('email')
        .trim()
        .normalizeEmail()
        .not()
        .isEmpty()
        .withMessage('Invalid email address!')
        .bail(),
    (req, res, next) => {
        const errors = validationResult(req);
        if (!errors.isEmpty())
            return res.status(400).json({ errors: errors.array() });
        next();
    },
];

app.get('/', (req, res) => {
    res.send('Hello World!')
})


app.post(
    '/users',
    validateUser,
    (req, res, next) => {
        res.send('Success')
    },
);

app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
})

在第一个答案的帮助下,我找到了适合我的案例的正确解决方案,这里是:

const express = require('express')
const router = express.Router()
const {body, validationResult} = require('express-validator');

const nameValidation = 
    body('name').trim().isLength({ min: 1 }).withMessage('Name empty.')
    .isLength({ min: 3 }).withMessage('Name must contain min 3 letters.')
    .isAlpha().withMessage('Name must be alphabet letters.');

router.post('/new', nameValidation, poneNumberValidation, (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(400).json({ errors: errors.array()}); 
    }
    
    const contact = req.body;
    contact.id = getRandomId();
    contacts.push(contact);
    res.redirect("/contacts");
    res.render("index", {contacts});
})

PS: poneNumberValidation 和 getRandomId 是我在代码中实现的函数,与本题无关