2017-09-05 3 views
0

タイトルのようなエラーが発生しました。 以下は私のコードです。誰か助けてくれますか?ノードjs - 新しいエラーをスローする( '送信後にヘッダーを設定できない');

私は 'app.get'あたり1回だけ送信したと思います。 私はindex.htmlとsplash.htmlの大文字小文字を区別したいと思います。 応答を与える前に、私は1秒間遅延させたいと思います。

app.use(delay(1000)); 
app.get('/index.html', function(req, res) { 
    var pathName = req.url; 
    console.log('!!!!!!!!!!!'); 
    console.log(pathName); 

    fs.readFile(__dirname + '/views/index.html', function(error, data) { 
     console.log(__dirname); 
     if(error){ 
      console.log(error); 
     } else { 
      console.log("load html"); 
      console.log(req.url); 
      csp.add(req, res, options); 
      res.render(__dirname + '/views/index.html'); 
      res.end(); 
     } 
    });  
}); 


app.get('/splash.html', function(req, res) { 
    var pathName = req.url; 
    console.log('!!!!!!!!!!!'); 
    console.log(pathName); 


    fs.readFile(__dirname + '/views/splash.html', function(error, data) { 
     console.log(__dirname); 
     if(error){ 
      console.log(error); 
     } else { 
      console.log("load html"); 
      console.log(req.url); 
      csp.add(req, res, options); 
      res.render(__dirname + '/views/splash.html'); 
      res.end(); 
     } 
    });  
}); 
+0

「app.use(delay(1000))」を削除しても同じエラーが表示されますか? – turmuka

+0

いいえ、私は '遅延'せずにエラーになりませんでした。私は速達を使って遅れを与えたいと思います。それが問題だと思いますか? –

答えて

1

res.renderrenderとして応答を終了しますres.end()後に削除してください。ヘッダーを設定する場合は、あらかじめ行ってください。

遅延を達成する最も良い方法は、おそらく応答を送信する前にsetTimeoutを使用することです。

1

これを達成する最善の方法は、rxモジュールを使用することです。下記のコードをご覧ください。応答は3秒後に送信されます。これは遅延のために使用するモジュールです。

var app = require('express')(); 
const timeout = require('connect-timeout'); 
const Rx = require('rx'); 

// Response will be delayed for 3 seconds 
app.get('/', function(req, res) { 
    Rx.Observable.create((observer) => { 
    observer.onNext({ 
     response: 'potato' 
    }) 
    observer.onCompleted() 
    }) 
    .delay(new Date(Date.now() + 3000)) //setting it to 3 seconds 
    .subscribe((x) => { 
     console.log(x);     //logs response: 'patato' 
     console.log('this runs'); 
     res.status(200).send("3 seconds"); 
    }, (e) => { 
     console.log('this does not'); 
    }) 
    }); 

app.listen(4000); 
+0

あなたの返事ありがとうございます:)私はこれを試すことができ、問題はありません! –

関連する問題