#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()
в своем промежуточном программном обеспечении. Я обновляю свой ответ.