2017-04-24 14 views
1

使用時にコンソールエラーが発生するルートに基本認証があります。ヘッダーを設定できません

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) 
    at ServerResponse.header 

"if"ステートメントがtrue(ifステートメント内のコードが実行されている)の場合にのみ発生します。それが実行されないとき、私はエラーを取得していないし、 "ホーム"ビューはエラーなしでレンダリングします。

routes.get('/scan', (req, res, next) => { 
    const orderID = req.query.order; 
    const token = req.query.token; 

    if (!hasAccess(token)) 
     res.status(401).send('Unauthorized'); 

    res.render('home', {order}); 
}); 
+1

'res.status(401).send(「不正な」)の後に返すようにコードを更新;'そうしないと、すべての応答を送信しようとすると、ページをレンダリングします時間。 – Ken

答えて

1

あなたは、重複した応答を送信することを避けるために、あなたのres.status(401).send('Unauthorized');return;を追加する必要があります。

2

このエラーは、リクエストに複数回応答しようとするとスローされます。

このような種類のエラーを回避するには、応答を送信するときにreturnを入力する必要があります。そのため、この機能は続行されません。あなたのケースでは

routes.get('/scan', (req, res, next) => { 
    const orderID = req.query.order; 
    const token = req.query.token; 

    if(!hasAccess(token)) 
    return res.status(401).send('Unauthorized'); 
    return res.render('home', {order}); 
}); 
+0

関数の最後( 'return res.render(...)')は有用ではなく、省略することができます。 – mscdex

+1

私は同意しますが、それはやり方や習慣によって、あるいは特定のコンパイラで末尾呼び出しの最適化を使うのが一般的です。 –

+0

がありません); routes.get()呼び出しの終わりに。 – Ken

関連する問題