cre*_*ame 9 validation node.js express
我正在Node.js中使用一个非常基本的注册表单(使用Express),我正在尝试找到提供基本表单验证的最简单方法.我已经选择了"Express-Validator",这似乎做得很好.但是,我的目标是只显示所需的任何验证消息,并保留用户单独输入的值.
似乎请求信息没有回到res.render,我认为这是有意义的.但是,我看到了我能想到的任何地方,我找不到任何讨论如何在显示错误消息后保持表单字段填充的参考.
下面是一个描述我的方法的小片段:
post: function(req, res){
var userName = req.body.username;
var password = req.body.password;
//Validate input
req.assert("username", 'Invalid email address.').isEmail();
req.assert("password", 'Password cannot be empty.').notEmpty();
req.assert("passwordConfirm", 'Passwords entered do not match!').equals(password);
//Make sure we have no validation errors
var pageErrors = req.validationErrors();
if(!pageErrors)
{
userModel.CreateUser(userName, password, function(err){
if(err)
{
//there was a problem inserting new user... probably already exists
//will need to check the error to confirm
var dbErrorMessage = "Could not insert record into database!";
if(err.code === 11000)
{
//this is a duplicate entry
dbErrorMessage = "A user with that email address already exists!";
}
res.render('register.html', { pageErrors: [{msg: dbErrorMessage }]});
}
else
{
res.render('register.html', { successMessage: successMessage });
}
});
}
else
{
res.render('register.html', { pageErrors: pageErrors });
}
Run Code Online (Sandbox Code Playgroud)
Err*_*ald 12
不幸的是,您必须手动重新填充表单.如果您收到任何页面错误,则会将表单值传回给视图.
if(!pageErrors)
{
// ...
}
else
{
res.render('register.html', {
pageErrors: pageErrors,
userName: userName
});
}
Run Code Online (Sandbox Code Playgroud)
在您看来,您会做一个简单的检查,看看它们是否有任何错误并相应地重新填充.您必须跟踪为每个表单字段生成的错误.
<% if (userNameError) { %>
<input type="text" name="userName" value="<%- userName %>" />
<% } else { %>
<input type="text" name="userName" />
<% } %>
Run Code Online (Sandbox Code Playgroud)
另一种流行的方法是通过ajax将表单发送到服务器,并进行所有验证.如果出现错误,则输入的表单数据仍然存在,您将显示错误,否则在成功登录后重定向.以下是如何使用javascript提交表单的示例.
$("#login-button").live("submit", function (e) {
// this will prevent the form from being uploaded to the server the conventioanl way
e.preventDefault();
// the form data
var data = $(this).serialize();
// this logs the user in
$.ajax({
type: 'POST',
url: BASE_URL + '/login',
data: data,
dataType: 'json',
success: function (data, status) {
// successful
},
});
// superfluous fallback
return false;
});
Run Code Online (Sandbox Code Playgroud)
小智 5
你正在使用一种简单的方法
app.use(express.bodyParser()) and app.use(expressValidator());
Run Code Online (Sandbox Code Playgroud)
你可以使用req.body
res.render('register.html', {
pageErrors: pageErrors,
validated: req.body
});
Run Code Online (Sandbox Code Playgroud)
而且我不确定你使用的是哪种模板语言但是你可以做类似的事情......
<input type="text" name="userName" value="<%= pageErrors.userName.value || validated.userName %>" />
Run Code Online (Sandbox Code Playgroud)
然后,如果需要,则返回良好输入,如果需要更正则返回错误输入.