0

エクスプレスバリデーターを使用してフォームを検証しています...エラーが発生した場合、フォームの送信を停止してログインページに戻るための最良の方法は何ですか。これは私が持っているものであり、これを処理するための最良の方法を探しているだけです(returnステートメントについてはわかりません)。

//routes/index.js
exports.login.post = function(req, res){
  req.assert('username', 'Please enter username').notEmpty();
  req.assert('password', 'Please enter password').notEmpty();
  res.locals.errors = req.validationErrors(true);

  if ( res.locals.errors ) {
    console.log(res.locals.errors);
    var d = { title: 'Login' };
    res.render('login', { d: d });
    return;
  }

 //do login here if no errors
};

また、フォームテンプレート(ejs)で元の値を取得する方法もわかりません。

req.paramを渡してみましたが、空です。

errオブジェクトにはエラーのあるフィールドしかないため、usernameを入力し、パスワードを空白のままにすると、ユーザー名ではなくerrオブジェクトでのみパスワードを取得します...したがって、req.param.usernameが必要ですが、{q: req.param}を使用し、<%= inspect(q)%>を使用します。これは空です。

更新: req.bodyは、フォームに事前入力するための元の投稿パラメーターを提供します。したがって、優れたエクスペリエンスを得るには、errスタックとreq.bodyスタックが必要です。

4

2 に答える 2

2

This is what I do

app.post('/form_process', validateForm, form.handle)
function validateForm(req, res, next) {
  req.assert('username', 'Invalid Username').notEmpty().isAlpha();
  req.assert('password', 'Invalid Password').notEmpty().isAlpha();

  var errors = req.validationErrors();
  if (errors) {
    //res.send(errors,500);
    var original_values = {
      username: req.param('username'),
      password: req.param('password')
    }
    res.render('login', { errorMsg: errors, original: original_values, title: "Login error" })
    return;
  }
  else next()
}
于 2012-09-22T09:59:47.893 に答える
1

私が提案するのは、flashifyのようなものを使用して、フラッシュ通知を設定し、リクエストをビューにリダイレクトすることです。

したがって、次のようなことができます。

if ( res.locals.errors ) 
{
  res.flash('error','bad username/password');
  req.session.formData = req.body;
  res.redirect('back');
}

次に、ビュー内で、存在するかどうかを確認し、flash.error存在する場合はメッセージを出力します。次に: <%= flash.error %>:)

于 2012-09-22T06:07:39.377 に答える