Node.js Не может устанавливать заголовки после их отправки.При инициировании запроса XHR в другом запросе XHR

StackOverflow https://stackoverflow.com/questions/9332698

Вопрос

Node.js не может обрабатывать мой клиентский код, который выполняет что-то похожее на шаблон jQuery / Zepto XHR ниже:

родовое слово

Я использовал этот шаблон (инициирование запроса XHR в другом запросе XHR) раньше в других фреймворках. Я читал об Ошибка Node.js: Может » t установить заголовки после их отправки и как работает событийная модель сервера Node.js. Другими словами, первый запрос XHR не вызвал res.end (), поэтому при вызове второго запроса XHR Node.js жалуется (кстати, в непрерывном цикле).

У меня следующие вопросы: сможет ли кто-нибудь порекомендовать альтернативный шаблон для связывания запросов XHR на стороне клиента? Могу ли я что-нибудь сделать на стороне сервера Node.js, чтобы сохранить существующий шаблон на стороне клиента?

Обновление на основе принятого ответа
Ошибка, конечно же, в моем собственном коде на стороне сервера. Простая функция проверки выдавала ошибку, но при ее обнаружении вызывалась только функция res.end (). По какой-то причине у меня было предположение, что вызов res.end () немедленно остановит выполнение функции. В этом случае вставка «return» останавливает выполнение сразу после отправки сообщения JSON клиенту.

родовое слово
Это было полезно?

Решение

Проблема не в том, что вы думаете.Ваши два XHR выполняются последовательно, а не параллельно, из-за обратных вызовов.Обратный вызов success первого не сработает, пока весь процесс запроса / ответа не будет завершен для первого запроса (node.js уже вызвал response.end (), и браузер получил и проанализировал ответ).Только после этого начинается второй XHR.Имеющийся у вас шаблон AJAX на стороне клиента в порядке.Он будет одинаково хорошо работать с node.js и любым другим веб-сервером.

Ваша проблема заключается в коде node.js на стороне сервера, но это не ошибка или ограничение в node, это ошибка программирования с вашей стороны.Разместите код на стороне сервера, и мы поможем вам его отследить.Новички в node.js часто сталкиваются с этой ошибкой из-за простой ошибки в коде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top