Jes*_*ess 0 node.js express express-validator
我正在尝试验证登录请求,它接受用户名(可以是电子邮件或用户名)和密码。我如何使用 Express-Validator 来做到这一点?
我正在阅读文档,验证器的工作方式是您必须将数据作为第二个参数传递。我不确定如何检查它是否也是用户名或密码。
router.post("/", (req, res) => {
const { nickname, password } = req.body;
// Create a new object based on email or username
const login = {};
if (nickname.indexOf('@') === -1) {
login.nickname = nickname;
} else {
login.email = nickname;
}
login.password = password;
// JWT Sign...
});
Run Code Online (Sandbox Code Playgroud)
通过验证器,我还想检查它是否是
试图
router.post("/", (req, res) => {
const { nickname, password } = req.body;
// Create a new object based on email or username
const login = {};
if (nickname.indexOf('@') === -1) {
check('nickname').isLength({ 'min': 3 });
login.nickname = nickname;
} else {
check('nickname').isEmail();
login.email = nickname;
}
login.password = password;
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
});
Run Code Online (Sandbox Code Playgroud)
似乎验证器不起作用。
您可以用来oneOf验证用户名或电子邮件。这是一个例子:
const util = require('util');
const { validator } = require('express-validator');
const { check, oneOf, validationResult } = require('express-validator/check');
const validation = [
oneOf([
check('nickname')
.exists()
.withMessage('nickname is required')
.isLength({ min: 3 })
.withMessage('wrong nickname length'),
check('nickname')
.exists()
.withMessage('nickname is required')
.isEmail()
.withMessage('nickname not valid'),
]),
check('password')
.exists()
.withMessage('password is required')
];
function handleValidationErrors(req, res, next) {
const errors = validationResult(req);
if (!errors.isEmpty()) {
console.log(util.inspect(errors.array()));
return res.status(422).json({ errors: errors.array() });
}
next();
};
router
.post('/', validation, handleValidationErrors,
(req, res) => {
const isEmail = validator.isEmail(req.body.nickname);
res.status(200).json({ isEmail });
});
Run Code Online (Sandbox Code Playgroud)
nickname可以是长度超过 3 的字符串或电子邮件。始终需要密码。验证器数组作为中间件数组传递到router.post(). handleValidationErrors()只是一个辅助函数。实际逻辑中你可以有相同的逻辑,或者如果你愿意的话可以使用try-catch。
我isEmail()在主回调中使用来检查它是用户名还是电子邮件。然后我在回复中发送该内容。您可以isEmail随心所欲地使用。
| 归档时间: |
|
| 查看次数: |
22685 次 |
| 最近记录: |