如何在使用快速验证程序注册时验证用户用户名
How to validate a users username when registering using express validator
我正在使用express/node创建用于身份验证/授权的后端api,并使用mongodb来存储数据。
我正在使用快速验证器来验证输入请求。我想验证用户名是否已经存在 - 图书馆建议我应该使用异步函数来执行此操作。
尽管它在邮递员中返回带有正确错误消息的数据,但我的服务器因该消息而崩溃。
错误:发送标头后无法设置标头。
服务器.js
app.use(validator({
customValidators: {
isUsernameAvailable: function(username) {
return new Promise(function(resolve, reject) {
User.findOne({'username': username}, function(err, results) {
if(err) {
return resolve(err);
}
reject(results);
});
});
}
}
}));
身份验证路由.js
var express = require('express');
var router = express.Router();
var controller = require('../controllers/auth.controller');
var middleware = require('../middleware/auth.middleware');
router.post('/login', controller.login);
router.post('/register', middleware.register, controller.register);
module.exports = router;
身份验证中间件.js
module.exports.register = function(req, res, next)
{
req.checkBody({
'username': {
notEmpty: true,
errorMessage: 'Username is required'
},
'email': {
notEmpty: true,
isEmail: {
errorMessage: 'Invalid Email Address'
},
errorMessage: 'Email is required'
},
'password': {
notEmpty: true,
errorMessage: 'Password is required'
},
'password_confirmation': {
notEmpty: true,
errorMessage: 'Password Confirmation is required'
}
});
req.assert('password_confirmation', 'Passwords do not match').equals(req.body.password);
req.check('username', 'This username is already taken').isUsernameAvailable();
var errors = req.validationErrors(true);
if(errors) {
return res.json({
success: false,
errors: errors
});
}
req.asyncValidationErrors().catch(function(errors) {
if(errors) {
return res.json({
success:false,
errors: errors
});
};
});
next();
}
我认为
这是因为以下块都运行了:
var errors = req.validationErrors(true);
if(errors) {
return res.json({
success: false,
errors: errors
});
}
req.asyncValidationErrors().catch(function(errors) {
if(errors) {
return res.json({
success:false,
errors: errors
});
};
});
文档说您应该使用其中一个。 req.validationErrors(true);
用于同步、映射的错误,而req.asyncValidationErrors()
用于异步未映射错误。目前,您正在使用两者 - 它们都在运行并尝试发送响应(这就是您收到消息的原因:can't set headers after they are sent
.
有关详细信息,请参阅其自述文件中的验证错误部分。
相关文章:
- 使用JavaScript验证用户交互/输入-这是一种很好的方法
- 根据某些条件验证用户输入,而不是将输入输入到数组中,需要最基本的解决方案
- 实现已验证用户更新状态的最佳方式,作为对系统中已更改状态的反应.(ASP.NET MVC网站)
- 如何验证用户在离开文本框时是否在文本框中输入了内容
- 正在尝试验证用户ID
- 基于Rails的javascript应用程序的安全性:如何在渲染的javascript中验证用户的权限
- 正在尝试获取有关已验证用户的信息
- 通过 JS 和 ajax 验证用户登录
- 如何验证用户是否来自我的 6 个域之一
- 如何验证用户是否已选择要上传的文件
- 如何在角度表单日期选择器中验证用户输入
- 验证用户是否仅投票一次
- 如何在使用快速验证程序注册时验证用户用户名
- 一个简单的jquery片段来验证用户'的电子邮件地址
- 淘汰验证用户定义的规则
- 验证用户输入HTML子集
- 如何验证用户的facebook ID以防止再次提交
- 验证用户控件输入值
- 如何验证用户是否在使用PHP、JS和/或REST API跟踪您?
- promise使用password.js验证用户时出现问题