Как остановить интервал в узле js при закрытии браузера или изменении маршрута с помощью Express

#javascript #node.js #express

#javascript #node.js #экспресс

Вопрос:

Вот мой фрагмент кода моего реального проекта. Интервал начинается, когда я захожу на страницу «/ tracking», все в порядке…

Но когда я захожу в «/ 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);
  

Комментарии:

1. req.connection.on(‘close’,function(){ clearInterval(MyTimer) });

Ответ №1:

 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 сработает при перезагрузке.

Комментарии:

1. Нет, это не работает… Это показывает страницу загрузки. Не вижу «это отслеживание!» в браузере.

2. ах, мой плохой, я забыл next() в своем промежуточном программном обеспечении. Я обновляю свой ответ.