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');
});
助けてください!
もご入力のサンプルを記載してください。あなたが '.split()'と '.replace()'を使ってそこで行うことは、私にはおかしくないようです。 – Tomalak
分割と置き換えは、DataTablesエディタがリクエストとして送信するマルチレベルJSONオブジェクトの完全なdogs朝食から、更新に必要なデータを取得することです。それはエレガントではないかもしれませんが、実際には、アップデートは機能しています。上で述べたように、リダイレクトが動作していなくても(編集された質問を参照) – Drum
JSONで文字列メソッドを* *使用しないでください。ここでは「実用的」という言葉の余地はありません。解析する。 。 JSON。ノードには無料のJSONパーサーがあり、それを使用してください - それは痛みがなく、適切なことです。 – Tomalak