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 是我在代码中实现的函数,与本题无关
这是我的代码。我想检查名称是否按字母顺序排列并且有超过 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 是我在代码中实现的函数,与本题无关