Validation 在express/connect中重新填充表单值
我刚刚启动了一个新的nodejs应用程序,它将包含大量用于创建和编辑/更新数据库值的表单。我的问题是:如果给定的数据无效,如何重新填充表单条目 有人试图登录。如果凭据错误,我将使用类似以下内容再次显示登录页面:Validation 在express/connect中重新填充表单值,validation,node.js,express,connect,pug,Validation,Node.js,Express,Connect,Pug,我刚刚启动了一个新的nodejs应用程序,它将包含大量用于创建和编辑/更新数据库值的表单。我的问题是:如果给定的数据无效,如何重新填充表单条目 有人试图登录。如果凭据错误,我将使用类似以下内容再次显示登录页面: res.render('sessions/new') 问题是,用户名中没有填充请求数据。我想知道如何做到既简单又干净。因为在rails中没有类似于的表单,我想我必须手动实现它,对吗?我的第一种方法是绕过请求主体/参数作为render函数的局部变量,并在我的jade模板中设置值,如下所示
res.render('sessions/new')
问题是,用户名中没有填充请求数据。我想知道如何做到既简单又干净。因为在rails中没有类似于的表单,我想我必须手动实现它,对吗?我的第一种方法是绕过请求主体/参数作为render
函数的局部变量,并在我的jade模板中设置值,如下所示:
// In controller/route
res.render('sessions/new', req.body)
// In template
input(type='text', name='username', value=locals.username)
有更好或更不引人注目的解决方案吗?我的意思是上面的例子很好用,很容易实现,只是想知道我是否遗漏了什么。这对于向无效表单字段添加错误类之类的内容也很有趣。在网上找不到任何东西
提前谢谢 我使用jQuery在客户端完成这项工作 我使用ExpressValidator生成一个错误映射,它包含字段名、原始值和一条错误消息 然后我只需在页面底部的布局模板上打印该内部脚本标记,在jQuery中检查它是否为空并循环遍历错误堆栈。将字段标记为错误并显示原始值和错误消息 以下是快速验证程序代码: 路线:
req.assert('username', 'Enter username').notEmpty();
req.assert('password', 'Enter password').notEmpty();
res.locals.errors = req.validationErrors(true);
res.render('/login');
视图:
用户名
var误差=;
客户端javascript(jQuery):
for(变量e在错误中){
变量$field=$('[name='+e+']'),
$el=$field.parents('p');
$el.addClass('err');
$el.append(“”+错误[e].msg+“”);
}
另一种方法是在您的视图中执行一系列if/else和echo语句,这些语句可能会变得非常难看、非常快。我使用jQuery在客户端执行 我使用ExpressValidator生成一个错误映射,它包含字段名、原始值和一条错误消息 然后我只需在页面底部的布局模板上打印该内部脚本标记,在jQuery中检查它是否为空并循环遍历错误堆栈。将字段标记为错误并显示原始值和错误消息 以下是快速验证程序代码: 路线:
req.assert('username', 'Enter username').notEmpty();
req.assert('password', 'Enter password').notEmpty();
res.locals.errors = req.validationErrors(true);
res.render('/login');
视图:
用户名
var误差=;
客户端javascript(jQuery):
for(变量e在错误中){
变量$field=$('[name='+e+']'),
$el=$field.parents('p');
$el.addClass('err');
$el.append(“”+错误[e].msg+“”);
}
另一种方法是在您的视图中执行一系列if/else和echo语句,这些语句会变得非常难看、非常快。我使用中间件。通常,此模块用于提供信息的消息(成功、错误等),但也适用于跨请求持久化表单数据
发布表单数据时:
router.post('/create-user', function(res, req, next) {
// Do stuff
if (invalid) {
req.flash('form', req.body);
res.redirect('/create-user');
}
});
然后在GET方面:
router.get('/create-user', function(res, req, next) {
// Render the template with form data
res.render('my_template', {
form: req.flash('form')[0] || null
});
});
然后在my_template.hbs
中(我使用把手):
...
希望有帮助。我使用中间件。通常,此模块用于提供信息的消息(成功、错误等),但也适用于跨请求持久化表单数据
发布表单数据时:
router.post('/create-user', function(res, req, next) {
// Do stuff
if (invalid) {
req.flash('form', req.body);
res.redirect('/create-user');
}
});
然后在GET方面:
router.get('/create-user', function(res, req, next) {
// Render the template with form data
res.render('my_template', {
form: req.flash('form')[0] || null
});
});
然后在my_template.hbs
中(我使用把手):
...
希望这能有所帮助。Hm,由于我在模型中验证数据,express validate对我来说没有意义,但感谢您的提示。Hm,由于我在模型中验证数据,express validate对我来说没有意义,但感谢您的提示。