У меня есть приложение для чат-бота, в которое я хочу отправить одно сообщение, например. res.json ("Привет") из экспресс, затем другое сообщение позже, например res.json («Как дела?»), но вы хотите обработать какой-то код между ними.
У моего кода, похоже, есть некоторые проблемы с этим, потому что, когда я удаляю первый res.json (), второй работает нормально и не вызывает никаких проблем.
Заглядывая в свои журналы heroku, я получаю от сервера множество глупых ответов с IncomingMessage = {}, содержащими объекты readableState и Server, когда я включаю обе эти функции res.json ().
Любая помощь приветствуется.
HTTP - это запрос / ответ. Клиент отправляет запрос, сервер отправляет ОДИН ответ. Ваш первый res.json() - это ваш ОДИН ответ. Вы не можете отправить другой ответ на тот же запрос.
@Casagrande большое спасибо. Мне нужно отправить несколько ответов, например, мой бот читает сообщение и несколько сообщений. Если вы можете порекомендовать хорошие статьи по созданию чат-ботов, дайте мне знать :)





res.json () всегда немедленно отправляет ответ клиенту (повторный вызов вызовет ошибку). Если вам нужно постепенно наращивать отклик, вы можете постепенно украсить простой старый объект javascript; например, добавление элементов в массив. Когда вы закончите, вызовите res.json () с созданным ответом.
Но вы должны опубликовать свой код, чтобы мы могли видеть, что происходит.
спасибо, это полезно знать, поскольку вы, вероятно, можете сказать, что я новичок в js / node.js. Этот метод не сработает для меня, так как мне нужно отправить ответ, чтобы сказать, что я печатаю, пока мой веб-перехватчик просматривает базу данных и т. д. Я собираюсь проверить socket.io, как рекомендовано выше
HTTP - это запрос / ответ. Клиент отправляет запрос, сервер отправляет ОДИН ответ. Ваш первый res.json() - это ваш ОДИН ответ. Вы не можете отправить другой ответ на тот же запрос. Если нужно просто собрать все данные перед отправкой одного ответа, вы можете переосмыслить свой код, чтобы собрать все данные перед отправкой одного ответа.
Но то, что вы, кажется, ищете, - это «проталкивание сервера», когда сервер может отправлять данные клиенту постоянно, когда он этого хочет. Обычным решением для этого является подключение к webSocket (или socket.io, который построен поверх webSocket и добавляет больше функций).
В архитектуре webSocket / socket.io клиент устанавливает соединение с сервером, и соединение остается открытым на неопределенный срок. Тогда любая сторона соединения может отправлять сообщения на другой конец. Это наиболее полезно, когда сервер хочет «протолкнуть» данные клиенту в любое время. В этом случае клиент устанавливает соединение, а затем сервер может отправлять данные клиенту через это соединение в любое время. Клиент регистрирует прослушиватель входящих сообщений и будет уведомлен каждый раз, когда сервер отправляет ему какие-либо данные.
И webSocket, и socket.io полностью поддерживаются в современных браузерах и в node.js. Я бы лично рекомендовал использовать socket.io, потому что некоторые из добавляемых им функций (уровень обмена сообщениями, автоматическое переподключение и т. д.) Очень полезны.
Чтобы использовать такой постоянно подключенный сокет, вам необходимо убедиться, что инфраструктура вашего хостинга правильно настроена, чтобы это позволяло.
Покажи свой код. Если вам нужен чат-бот, вы должны использовать для разговора не экспресс, а веб-сокеты. Загляните в
socket.io