Node.js Не может устанавливать заголовки после их отправки.При инициировании запроса XHR в другом запросе XHR
-
27-10-2019 - |
Вопрос
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 часто сталкиваются с этой ошибкой из-за простой ошибки в коде.