我正在尝试验证用户名字段,但我不希望字符串中有任何空格。我想向用户显示一个错误。
我正在使用 express-validator express 中间件来验证输入。它适用于所有其他情况,但我不知道验证没有空格的最佳方法。
https://www.npmjs.com/package/express-validator
我的代码
这就是我所拥有的,但目前可以将带空格的用户名存储在数据库中。
check('user_name').isLength({ min: 1 }).trim().withMessage('User name is required.')
Run Code Online (Sandbox Code Playgroud)
理想情况下,我可以使用快速验证器方法。
谢谢你。
我已经实施express-validator并正在尝试清理用户正在搜索特定查询的输入字段。
我使用的测试查询是<script>Malicious code</script. 当请求进来时,我使用:
req.sanitizeQuery('searchQuery');
Run Code Online (Sandbox Code Playgroud)
当我然后检查查询是否已被清理时,该字符串没有以任何方式被更改/清理。
我在这里可能从根本上误解了消毒,在这种情况下,请指出。如果我是,那么我可以去填补我的知识空白,但与此同时,我可以向我的消毒剂抛出什么“测试”查询以检查它是否有效?
我在expressjs应用程序中使用express-validator 5.2.0。我在表单数据上实现了验证。但是它不会捕获错误,而是提供空错误对象。验证运行时,当我提交空白表格时,它显示“无错误”。它应遵循错误路径并应显示错误。
var express = require('express');
var router = express.Router();
const { check, validationResult } = require('express-validator/check');
router.post('/register', [
check('firstName', 'First Name is required').isEmpty(),
check('lastName', 'Last Name is required').isEmpty(),
check('username', 'User Name is required').isEmpty(),
check('password', 'Password is required').isEmpty()
], (req, res, next)=>{
let errors = validationResult(req);
if (!errors.isEmpty()) {
console.log(errors.mapped());
console.log("errors")
return res.render('auth/register', { errors: errors.mapped() })
}else{
console.log('no errors')
return res.render('auth/login');
}Run Code Online (Sandbox Code Playgroud)
这个验证工作正常
app.post('/login', passport.authenticate('local-login', {
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true
})
);
Run Code Online (Sandbox Code Playgroud)
但我试图在使用快速验证器进行身份验证之前验证表单的字段。
我带着那个来的
app.post('/login', function(req, res){
req.checkBody('email', 'Email is required').notEmpty();
req.checkBody('email', 'Email is not valid').isEmail();
req.checkBody('password', 'Password is required').notEmpty();
var validationErr = req.validationErrors();
if (validationErr){
res.render('login', {
errors: validationErr,
failureFlash: true
});
} else {
// authenticate once fields have been validated
passport.authenticate('local-login', {
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
})
}
});
Run Code Online (Sandbox Code Playgroud)
使用第二个代码,当我提交表单时没有任何反应,并且客户端给出错误消息localhost一段时间后没有发送任何数据。第一部分工作正常,当我提交空表单并达到验证方法时,我可以看到所有错误。我怀疑这个问题可能部分回答我的问题或者有点相关,但我无法理解。
Passport.js文档提供了一个带有函数的示例,但仅当身份验证成功时才会调用该函数,因此之后。我想在身份验证之前执行字段验证。
如果您需要护照验证码,请告诉我。
在开发express.js 应用程序时,我使用 Express-validator 中间件验证(服务器端)输入。对于必须仅包含希腊语或英语字母的特定输入,我尝试isAlpha(['el-GR', 'en-US'])按照 validator.js 库的建议进行操作。
但是,在测试时,我收到此错误:
无效区域设置“el-GR,en-US”
我究竟做错了什么?
如果输入字段(即名称)不仅由 Express-validator 中的字母组成,我会尝试给出错误
req.check('name')
.isLength({min:3}).withMessage('Name must be of 3 characters long.')
.isAlpha().withMessage('Name must be alphabetic.');
Run Code Online (Sandbox Code Playgroud)
但是当我在“名称”输入字段中输入“John Doe”时,它显示“名称必须是字母”而不是成功验证
我正在尝试验证登录请求,它接受用户名(可以是电子邮件或用户名)和密码。我如何使用 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 …Run Code Online (Sandbox Code Playgroud) 听说最好的做法是清理前端和后端的数据。
我在前端进行了一些验证(即检查是否通过 Regex 发送电子邮件并确保密码具有特定长度)。
但是现在我想使用自定义验证器来检查我的 mongodb 数据库中是否存在电子邮件。
.post(body('username').custom(value => {
UserModel.findOne({ 'email': value }).then(user => {
if (user) {
return Promise.reject('E-mail already in use');
}
});
}),
Run Code Online (Sandbox Code Playgroud)
这是我的其余代码:
var router = require('express').Router()
var UserModel = require('../models/UserModel')
var { body } = require('express-validator');
router
.route('/registration')
.get(function(req, res) {
UserModel.find({}, (err, users) => {
if (err) res.status(500).send(err)
res.json(users)
})
})
.post(body('username').custom(value => {
UserModel.findOne({ 'email': value }).then(user => {
if (user) …Run Code Online (Sandbox Code Playgroud)