2016-10-05 13 views
0

これは私の実際のプロジェクトのコードスニペットです。私がページ/トラッキングを行っている時のインターバルスタート、それは大丈夫です...ブラウザが閉じるときにノードjsの間隔を停止する方法

しかし、私は '/ app'に行くときに、また実行している。私はグローバルなものとclearInterval(myTimer)近くにあり、私の質問は、そのシナリオでは、ある区間について知っている -

間隔時にルート変更または近いブラウザを閉じる方法、おかげで、

var express = require('express'); 
var app  = express(); 

app.get('/app', function(req, res) { 
    res.send("this is app page"); 
}); 


app.get('/tracking', function(req, res) { 

    var myTimer= setInterval(function() { 
     console.log("Tracking Start between 20 second interval") 
    }, 20000); 

    res.send('this is a tracking page!'); 
}); 

//Lets define a port we want to listen to 
const PORT = 3001; 

app.listen(PORT); 
console.log('Magic happens on port ' + PORT); 
+0

req.connection.on( 'close'、function(){ clearInterval(myTimer) }); – Keith

答えて

0
var express = require('express'); 
var app  = express(); 
var timer = null; 

app.use(function(req, res, next) { 
    // remove this line if you are not using HTML5 routing 
    if(timer) clearInterval(timer); 

    req.on('close', function() { if(timer) clearInterval(timer) }); 
    next(); 
}); 

app.get('/app', function(req, res) { 
    res.send("this is app page"); 
}); 


app.get('/tracking', function(req, res) { 

    timer= setInterval(function() { 
     console.log("Tracking Start between 20 second interval") 
    }, 20000); 

    res.send('this is a tracking page!'); 
}); 

//Lets define a port we want to listen to 
const PORT = 3001; 

app.listen(PORT); 
console.log('Magic happens on port ' + PORT); 

ような何かこれはうまくいくかもしれない。 HTML5ルーティングを使用しているかどうかわかりません(リロードなし)。しかし、再ロードするときにイベントcloseが発生すると思うので、私がコメントした部分を削除することができます。

+0

いいえ、それは動作しません...それは、ページを表示しています。 「これは追跡です!」とは見えません。ブラウザで。 –

+0

ああ私の悪い私のミドルウェアで 'next()'を忘れてしまった。私は自分の答えを更新する。 –

関連する問題