2016-09-27 4 views
1

DataTables Editorインラインフィールドから送信されたデータに基づいてmongo dbを更新するExpressポストルートがあります。これまでのところ、データベースはうまく更新されています。それは、更新クエリが正常に実行された後で、元のページにリダイレクトする必要があります。ノードコンソールは、元のページへのGETルートが呼び出されているが、ページ自体はロードされていないことを示しているようです。次のようにPOST後のノード/エクスプレスリダイレクト

POST関数のコードは次のとおりです。

router.post('/edit', function(req,res){ 
var theKeys = _.keys(req.body); 
var theMeat = theKeys[1]; 
var bits1 = theMeat.split("]["); 
// this is the updated value 
var newVal = req.body[theMeat]; 
// this is the row _id 
var cleanId = bits1[0].replace("data[row_",""); 
// this is the field to update 
var cleanRow = bits1[1].replace("]",""); 
// cast the id string back to an ObjectId 
var updId = new ObjectId(cleanId); 

var query = {}; 

query[cleanRow] = newVal; 

var MongoClient = mongodb.MongoClient; 
var url = 'mongodb://localhost:27017/gts'; 
MongoClient.connect(url, function(err, db){ 
    if(err){ 
     console.log("Error connecting to the server", err); 
    }else{ 
     //console.log("Connected for Edit"); 

     var collection = db.collection('events'); 
     collection.updateOne({"_id":updId},{$set:query},function(err,result){ 
      if(err){ 
       console.log("Error adding message", err); 
      }else if(result){ 
       //console.log("Update attempted", result.result); 
       res.redirect('/admin'); 
      }else{ 
       console.log("Unknown error"); 
      } 
     }); 
    } 
    }); 
}); 

GETルートが直接呼び出されたときに正常に動作しますが、このように呼ばれたときに停止しているようです。

リダイレクト自体を除いてすべてを削除すると、同じことが起こるので、POSTルートには何もありません。

router.post('/test',function(req,res){ 

    res.redirect('/admin'); 

}); 

助けてください!

+0

もご入力のサンプルを記載してください。あなたが '.split()'と '.replace()'を使ってそこで行うことは、私にはおかしくないようです。 – Tomalak

+0

分割と置き換えは、DataTablesエディタがリクエストとして送信するマルチレベルJSONオブジェクトの完全なdogs朝食から、更新に必要なデータを取得することです。それはエレガントではないかもしれませんが、実際には、アップデートは機能しています。上で述べたように、リダイレクトが動作していなくても(編集された質問を参照) – Drum

+1

JSONで文字列メソッドを* *使用しないでください。ここでは「実用的」という言葉の余地はありません。解析する。 。 JSON。ノードには無料のJSONパーサーがあり、それを使用してください - それは痛みがなく、適切なことです。 – Tomalak

答えて

0

私は、リダイレクトがどのように機能しているかについて誤解があると思います。リダイレクトはHTTPメカニズムで、ブラウザでリクエストをリダイレクトします(つまり、は別のURLに同じリクエストを2回目にします))。

POSTは特定のIDを持つ特定のサーバーにデータを送信していたため、リダイレクトされません。ブラウザは、未知の目的地に送信されたデータからユーザを守るためにかなりの魔法を使っています。

あなたはより深い洞察のために、この説明を参照してください可能性があります

https://softwareengineering.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect

+1

POST要求に対する応答は、リダイレクトすることができます。これはPost/Redirect/Getと呼ばれる一般的なパターンです。主に使用されます伝統的なフォーム処理、すなわちPOSTがページリロードにつながる場所のために。 – Tomalak

+0

だから、上記の場合にこれを処理する正しい方法は何ですか? – Drum

+0

あなたはいつでもあなた自身をリダイレクトできます。 (http://stackoverflow.com/questions/11570301/res-redirect-from-post) –

関連する問題