2017-10-30 3 views
0

エラーが送信された後にヘッダーを送信できません。さて、私はできること全てを取り除こうとしましたが、失敗します。私のルートは以下の通りですが、それはそれを行う最も効率的な方法ではありませんが、より良い方法はわかりません。複数のmongoクエリを送信した後にヘッダーを設定できません。

res.redirect("/dashboard/it/model");私は理想的には、それぞれの空白行がどこにあるかを知ることができます。これは私が最初に持っていたものです。私はそれらを削除し、同じエラーがあったので、私はかなり多くのres.render()であるsetRenderをコメントアウトしました。私はこの仕事をするために他に何が変わるかはわかりません。私は13種類のルートを作成する必要がないので、それぞれのクエリを実行する必要があります。私は必要な場合はそれを行うことができますが、むしろ1つの場所にすべてを持っています。

ルート:

// delete model 
    app.delete('/dashboard/it/model/delete/:id', 
    // setRender('dashboard/it/model'), 
    setRedirect({auth: '/login'}), 
    isAuthenticated, 
    (req, res, next) => { 
     AP.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     Cable.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     DeskPhone.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     Desktop.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     Laptop.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     MobilePhone.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     Monitor.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     Printer.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     Projector.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     Router.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     Switch.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     Tablet.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     }); 
     Custom.findByIdAndRemove(req.params.id, function(err){ 
     if(err){ 

     } else { 

     } 
     res.redirect("/dashboard/it/model"); 
     }); 
     next(); 
    }, 
    dashboard.getDefault); 
+1

まあ、応答を送信するコードは何も表示されないので、特定の要求に対して複数の応答を送信している場所を見つけることはできません。私たちが助けるために実際のコードを表示する必要があります。このエラーを引き起こす原因の一般的な考え方については、このトピックに関する何百もの質問があります。 – jfriend00

+0

あなたがここで何をしようとしているかは本当に不明です。もちろん、複数の場所で「レスポンスを送信」し​​ようとするのは間違っており、試行したときにエラーが発生するのはなぜですか。適用されるアクションの数に関係なく** ONE **レスポンスが必要です。基本的にはっきりしていないのは、提供されているモデルをすべて削除しようとしているのか、実際に登録したモデルから削除したいのかということです。質問は通常「なぜ?」という文脈から利益を得る。説明してください。 –

+0

ifとelseブロックステートメントを提供します。なぜなら、問題がある可能性があるすべてのレスポンスを送信する場合です。 – Vignesh

答えて

0

ここで私は(あなたがコードの多くを残してきたので、それが唯一の問題かどうかわからない)参照1つの単純な問題だが、あなたがres.redirect()を行っているということであり、あなたがしていますnext()を呼び出してください。あなたはどちらか一方を行う必要があり、両方を行う必要はありません。

res.redirect()は302応答を送信します。その後、next()を呼び出すと、他のミドルウェアやハンドラもリクエストを処理することができ、そのうちの1つが応答を送信する可能性が高くなります。同じ要求に対して複数の応答を送信しようとすると、表示されるエラーの原因になります。

リダイレクトする場合は、次に電話しないでください。

また

、あなたはあなたのようなres.redirect()next()をやろうとしている場合は、あなたもあなたのif/else句のいずれかで応答を送信することはできませんされています。あなたはそのコードの目的を説明していないので、実際にそのコードがどのように動作すると思われます。ここでの重要な原則は、リクエストごとに1つの応答しか送信しないことです。複数を送信すると、表示されるエラーが発生します。

+0

私は質問を間違って解釈しているかもしれませんが、「私は理想的にはres.redirect( "/ dashboard/it/model"); **それぞれの空白行が**、 * OPは各モデルへの "すべての呼び出し"でそれをしようとしていたことを私に示すようでした。だから私の前提は誤解が「連鎖」して一つの反応を返すということでした。もちろん私も、応答を変える可能性のあるnext()について心の中にメモを残していましたが、半分は、必要なものではなく、 "カーゴカルト"であるとのメモを作成しました。 –

+0

@NeilLunn - そういうわけで、私は自分の答えに先行しました。彼らが私たちにすべての本当の、そして関連するコードを示していない時、ときどき私達が見ることができるものに進むことができます。それ以外は推測です。しかし、この1つの問題は修正されるべき問題です。実際のコードでは他にも問題があります。 – jfriend00

+0

@ jfriend00 'next();'コールでしたので、 'dashboard.getDefault'のために必要でした。コードを省略すると、私は私の全ルートを含め、関連するミドルウェアが何をしたのかを説明しました。何を追加したらいいですか? – Kirbytech

関連する問題