Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 在express/connect中重新填充表单值_Validation_Node.js_Express_Connect_Pug - Fatal编程技术网

Validation 在express/connect中重新填充表单值

Validation 在express/connect中重新填充表单值,validation,node.js,express,connect,pug,Validation,Node.js,Express,Connect,Pug,我刚刚启动了一个新的nodejs应用程序,它将包含大量用于创建和编辑/更新数据库值的表单。我的问题是:如果给定的数据无效,如何重新填充表单条目 有人试图登录。如果凭据错误,我将使用类似以下内容再次显示登录页面: res.render('sessions/new') 问题是,用户名中没有填充请求数据。我想知道如何做到既简单又干净。因为在rails中没有类似于的表单,我想我必须手动实现它,对吗?我的第一种方法是绕过请求主体/参数作为render函数的局部变量,并在我的jade模板中设置值,如下所示

我刚刚启动了一个新的nodejs应用程序,它将包含大量用于创建和编辑/更新数据库值的表单。我的问题是:如果给定的数据无效,如何重新填充表单条目

有人试图登录。如果凭据错误,我将使用类似以下内容再次显示登录页面:

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对我来说没有意义,但感谢您的提示。