2017-11-17 4 views
-1

ファイルを読み取り、応答をブラウザーに送り返す際に、以下のエラーが表示されます。エラー:ファイルの読み取り中にヘッダーを送信した後にヘッダーを設定できません。

[ 'Error: Can\'t set headers after they are sent.', 
    ' at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11)', 
    ' at ServerResponse.setWriteHeadHeaders (/somepath/node_modules/on-headers/index.js:82:19)', 
    ' at ServerResponse.writeHead (/somepath/node_modules/on-headers/index.js:41:36)', 
    ' at /somepath/server/custom.js:71:13', 
    ' at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:380:3)' ] 

var fs = require('fs'); 
 

 
exports.customPageChatStatus = function(req, res) { 
 
\t if(req.params._pagename === 'Test123') 
 
\t { 
 
    \t \t fs.readFile("/somepath/Test123.txt", 'utf-8', function(err, data) { 
 
\t  if (err) console.log(err); 
 
\t  res.writeHead(200, {'Content-Type':'text/plain', 'Access-Control-Allow-Origin':'*' }); 
 
     \t res.end(data); 
 
    \t \t }); 
 
\t } 
 
\t if(req.params._pagename === 'SecondFile') 
 
\t { 
 
    \t \t fs.readFile("/somepath/SecondFile.txt", 'utf-8', function(err, data) { 
 
\t  if (err) console.log(err); 
 
\t  res.writeHead(200, {'Content-Type':'text/plain', 'Access-Control-Allow-Origin':'*' }); 
 
     \t res.end(data); 
 
    \t \t }); 
 
\t } 
 
\t else { 
 
\t \t fs.readFile("/somepath/InActive.txt", 'utf-8', function(err, data) { 
 
\t  res.writeHead(200, {'Content-Type':'text/plain', 'Access-Control-Allow-Origin':'*' }); 
 
     \t res.end(data); 
 
    \t \t }); 
 
\t } 
 
};

興味深いことに、私は "SecondFile.txt" を読んだとき、第一のファイル(Test123.txt)と無問題を読んだときにのみ、上記のエラーを見ています。

この問題を解決するお手伝いをお願いします。ここ

+0

すでにres.end()を実行し、私はそれがページ名と一致した場合にのみ、一度だけブロックを実行するための条件を使用しましたもう一度 –

+0

それを呼び出すときに、このエラーがocuuredされます要求で受け取った。私はそれが2回または複数回実行されているかわからない。 – dragonfly163

答えて

0

あなたの問題

var fs = require('fs'); 

    exports.customPageChatStatus = function(req, res) { 
     if(req.params._pagename === 'Test123') 
     { 
       fs.readFile("/somepath/Test123.txt", 'utf-8', function(err, data) { 
       if (err) console.log(err); 
       res.writeHead(200, {'Content-Type':'text/plain', 'Access-Control-Allow-Origin':'*' }); 
      res.end(data); 
       }); 
     } 
     else if(req.params._pagename === 'SecondFile') 
     { 
       fs.readFile("/somepath/SecondFile.txt", 'utf-8', function(err, data) { 
       if (err) console.log(err); 
       res.writeHead(200, {'Content-Type':'text/plain', 'Access-Control-Allow-Origin':'*' }); 
      res.end(data); 
       }); 
     } 
     else { 
      fs.readFile("/somepath/InActive.txt", 'utf-8', function(err, data) { 
       res.writeHead(200, {'Content-Type':'text/plain', 'Access-Control-Allow-Origin':'*' }); 
      res.end(data); 
       }); 
     } 
    }; 
+0

ありがとう!これは解決しました。基本的な場合は、他の問題 – dragonfly163

+0

私はあなたの答えを受け入れてupvote –

0

を解決しますあなたの文の中でそれはif..else ..場合は、実際に問題になるのは驚くべきことだ場合は、他に使用している場合。両方の条件が決して真実でないことを確かめてください。

私はより簡潔なアプローチを考えました。

簡素コード:

var fs = require('fs'); 

exports.customPageChatStatus = function(req, res) { 
    let pagename = req.params.pagename; 

    if (pagename !== 'Test123' || pagename !== 'Secondfile') pagename = 'InActive'; 

    fs.readFile(`/somepath/${pagename}.txt`, 'utf-8', function(err, data) { 
    if (err) return console.log(err); 
    res.writeHead(200, {'Content-Type':'text/plain', 'Access-Control-Allow-Origin':'*' }); 
    return res.end(data); 
    }); 
}; 
+0

をご利用ください場合は、 –

関連する問題