2016-11-29 2 views
0

У меня есть приложение, которое запускает длительные процессы в узле. Я ограничиваю эти длительные процессы одним пользователем.Узел с Express: хранение переменных сеанса, несколько обновлений response.status

Когда пользователь начинает длительный процесс я

req.session.busy = true; 
req.session.save(); 

Когда процесс закончен я

req.session.busy = false; 
res.status(200).json({ 
    done: true 
}); 

Если пользователь пытается запустить еще один длительный процесс, в то же время я

if (req.session.busy) { 
    res.status(200).json({ 
     busy: true 
    }); 
} 

Что я хотел бы сделать, это отправить ответ, чтобы подтвердить, что запрос был получен ,

res.status(200).json({ 
    process_started: true 
}); 

Но это завершает ответ. Я больше не могу установить busy = false в конце текущего процесса и отправить ответ, что процесс завершен.

Есть ли способ сохранить сеанс, отправить статус, на который был получен запрос, а затем отправить ответ статуса (200), когда процесс будет завершен?

Возможно, существует еще один статус, чем 200, который сохранит ответ в узле.

Я попытался

res.status(100).json({ 
    process_started: true 
}); 

Надеясь, что код состояния HTTP 100 - неформальный (продолжение) будет делать трюк, но не сигары. Приложение будет сбой, когда я попытаюсь отправить статус (200) после этого. Ошибка: невозможно настроить заголовки после их отправки.

+0

Возможно посмотреть в веб-сокетов (socket.io для узла) – tymeJV

ответ

0

Дело в том, что вы можете только отправить ответ раз. Когда страница загружена, она не будет «ждать» другого ответа и само обновление, это делается. Вот почему вы не можете отправить другой ответ.

  1. Первый вариант: отобразить сайт, который проверяет результаты (или даже прогресс) через AJAX. Вам нужно будет обслуживать государство на третьем маршруте, а затем опросить этот третий маршрут.
  2. Второй вариант: использование сокетов для передачи данных пользователю (см: http://socket.io/)