2011-09-10 11 views
3

Can't set headers after they are sentのエラーが多く発生しています。私はapp.jsに行番号を与えてくれないようです。人々はどのようにこれらのエラーをデバッグしますか?Node.jsで送信されたヘッダをデバッグするには

ヘッダーエラーを投げている私のコードは、行番号を隠すために何か奇妙なことをしていますか?

app.get('/', function(req, res, next) { 
    if (req.param('q')) { 
     searchProvider.search(
      req.param('q'), 
      function(error, results) { 
       res.render('search', { 
        locals: { 
         results: results, 
         q: req.param('q') 
        }, 
       }); 
      } 
     ); 
    } else { 
     res.render('index'); 
    } 
}); 
+0

のようなミドルウェアの部分を持っています。 – Tom

答えて

8

Can't set headers after they are sent

あなたは基本的にres.renderres.endまたはres.send複数回呼び出す意味一般的なエラーです。これは、1つのHTTP要求に複数のHTTP応答を書き込むことを意味します(これは無効です)。

このバグのよくある原因は、ミドルウェアでnextを2回呼び出すことです。

たぶん、あなたはおそらく、ヘッダを書き込んだ後res.sendを呼び出している

app.all("*", function(req, res, next) { 
    // not logged in 
    if (!req.user) { 
    res.render("loginError"); 
    } 
    // bad accidental next call!! Will call next after rendering login error 
    next(); 
}); 
+0

'next()'の代わりに何かを呼び出すべきでしょうか? 'return'のように? –

+0

@BenHumphreyo 'return res.render(...)'または 'else {next()}'はこれを修正します – Raynos

関連する問題