ExpressJS: Как узнать, когда запрос завершен? - PullRequest
7 голосов
/ 15 августа 2011

В ExpressJS, установленном поверх NodeJS, у меня есть немного кода, подобного этому:

app.get('/keys/readresults/:keyname', basic_auth, function(req,res){
    res.writeHead(200, {'content-type': 'text/json'});
    setInterval(
        go_to_database_and_get('stuff', function (database_replies) {
        res.write(database_replies)
        })
    ,5000);
});

Код написан так для простоты (если кому-то нужен настоящий код, я с удовольствием выложу его в каком-нибудь пастбине).

Что происходит, когда я curl -u username:password <a href="http://localhost:4000/keys/readresults/key" rel="noreferrer">http://localhost:4000/keys/readresults/key</a> именно то, что я хотел, чтобы получить: я получаю заголовок статуса 200, он проверяет базу данных на любые результаты, которые я хочу, и пишет ответ мне, затем ждет 5 секунд и ищет новые результаты в базу данных и снова записывает ответ, и так каждые 5 секунд.

Проблема в том, что когда я выхожу из curl, цикл продолжается вечно. Как мне сообщить express или nodejs, что он должен завершить этот цикл (думаю, с помощью clearInterval) , как только запрос закончится?

Ответы [ 2 ]

8 голосов
/ 09 сентября 2015

req.on('close', ...) больше не работает в Express 4. Используйте промежуточное ПО on-finished.

7 голосов
/ 15 августа 2011

req.on("close")

Так просто

app.get('/keys/readresults/:keyname', basic_auth, function(req,res){
    res.writeHead(200, {'content-type': 'text/json'});
    var no = setInterval(
        go_to_database_and_get('stuff', function (database_replies) {
        res.write(database_replies)
    });
    ,5000);
    req.on("close", function() {
        clearInterval(no);
    });
});
...