0

ここでやろうとしていることは、

リクエストを/expense/new送信するページからPOST/expense/newPost

Expressjs では、このように処理します

app.post('/expense/newPost', function(req, res) { ...

続けてmongoose、コレクションを次のように検証します

tmpExp = new Expense(req.body);

tmpExp.validate(function(err) {
  if(err || !isValidForm) {
    req.session.form.errField =  _.extend(req.session.form.errField, (err.errors || err ));
    req.session.rePop = req.body;
    res.redirect('/expense/new');
  } else {
    console.log('now saving') // successfully logs here.
    tmpExp.save(expPost, function(err2, savedDoc) {
      if(err2) {
        req.session.flash = { 
            global: true
          , css: "error"
          , message: "Internal Server Error"
        }
        res.redirect('/expense/new');
      } else {
        res.redirect('/expense/new?success=' + savedDoc.bill_id);
      }
    });
  }
});

明確にするために、検証コードの一部を削除しました。

問題は、ブラウザによって POST リクエストを送信した後、データが正常に mongodb に保存されますが、ブラウザはリダイレクトされず、サーバーからの応答を待つだけです。

4

2 に答える 2

3

保存コールバックが正しく渡されません。

tmpExp.save(expPost, function(err2, savedDoc) {

する必要があります:

tmpExp.save(function(err2, savedDoc) {
于 2012-10-29T07:53:17.083 に答える
1

検証コードがこのファイルから削除された唯一のものであると仮定すると、res定義されていません。Error または null を返し、res が存在する可能性が高い親関数で残りのロジックを実行することをお勧めします。モデルが再利用可能になるため、これも一般的に良い方法です (モデルにパス部分はありません)。

于 2012-10-29T05:38:14.807 に答える