Почему я не могу использовать res.json () дважды в одном почтовом запросе? - PullRequest
0 голосов
/ 03 июня 2018

У меня есть приложение chatbot, в которое я хочу отправить одно сообщение, например, res.json («Hello») из экспресса, затем другое сообщение, например, res.json («Как дела»), но хочу обработатьнекоторый код между двумя.

Мой код, похоже, имеет некоторые проблемы с этим, потому что когда я удаляю первый res.json (), тогда второй работает нормально и не вызывает никаких проблем.

Просматривая свои логи героев, я получаю много откликов от сервера, с IncomingMessage = {}, содержащим объекты readableState и Server, когда я включаю обе эти функции res.json ().

Любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

HTTP - запрос / ответ.Клиент отправляет запрос, сервер отправляет ОДИН ответ.Ваш первый res.json() - это ваш ОДИН ответ.Вы не можете отправить другой ответ на тот же запрос.Если это просто вопрос сбора всех данных перед отправкой одного ответа, вы можете переосмыслить свой код, чтобы собрать все данные перед отправкой одного ответа.

Но, по-видимому, вы ищете "сервер"нажмите ", где сервер может отправлять данные клиенту постоянно, когда он этого хочет.Обычным решением для этого является подключение к webSocket (или socket.io, который построен поверх webSocket и добавляет дополнительные функции).

В архитектуре webSocket / socket.io клиент устанавливает соединение с сервером исоединение остается открытым до бесконечности.Тогда любая сторона соединения может отправлять сообщения на другой конец.Это наиболее полезно, когда сервер хочет «передать» данные клиенту в любое время.В этом случае клиент устанавливает соединение, затем сервер может отправлять данные клиенту через это соединение в любое время.Клиент регистрирует прослушиватель для входящих сообщений и будет уведомляться каждый раз, когда сервер отправляет ему некоторые данные.

И webSocket, и socket.io полностью поддерживаются в современных браузерах и в файле node.js.Я бы лично порекомендовал использовать socket.io, потому что некоторые функции, которые он добавляет (уровень обмена сообщениями, автоматическое переподключение и т. Д.), Очень полезны.

Для использования такого постоянно подключенного сокета вы будете использоватьубедитесь, что ваша хостинговая инфраструктура правильно настроена, чтобы разрешить это.

0 голосов
/ 03 июня 2018

res.json () всегда отправляет ответ клиенту немедленно (повторный вызов вызовет ошибку).Если вам нужно постепенно создать ответ, вы можете постепенно декорировать простой старый объект javascript;например, добавление элементов в массив.Когда вы закончите, вызовите res.json () с созданным ответом.

Но вы должны опубликовать свой код, чтобы мы могли видеть, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...