#node.js #mongodb #mongoose
#node.js #mongodb #mongoose
Вопрос:
У меня есть интерфейс в angular, а API — в nodejs. Интерфейс отправляет мне зашифрованный файл, и прямо сейчас я сохраняю его в MongoDB. Но когда я отправляю этот файл во внешний интерфейс, вызов иногда прерывается. Поэтому, пожалуйста, подскажите мне, как я могу решить эту проблему с прерыванием вызова.
Ответ №1:
Ваш вопрос не особенно ясен. Насколько я понимаю, вы хотите отправить большой файл из серверной части Node клиенту. Если это правильно, то читайте дальше.
У меня была похожая проблема, из-за которой длительный вызов API занимал несколько минут, чтобы скомпилировать данные и отправить один большой ответ обратно клиенту. Эта проблема, с которой я столкнулся, была таймаутом, и я не смог ее продлить.
С помощью Node вы можете использовать «потоки» для потоковой передачи данных по мере их доступности клиенту. Этот подход действительно хорошо сработал для меня, поскольку сервер передавал данные в потоковом режиме, клиент их считывал. Это позволило обойти проблему с таймаутом, поскольку между сервером и клиентом часто происходит «болтовня».
Понимание использования Streams действительно заняло немного времени, и я потратил некоторое время на чтение различных статей и примеров. Тем не менее, как только я понял, это было довольно просто реализовать.
Эта статья о потоках узлов на сайте freeCodeCamp превосходна. Он содержит действительно полезный пример, где создается очень большой текстовый файл, который затем «передается» клиенту с помощью streams. Здесь показано, как вы можете читать текстовый файл «фрагментами», вносить преобразования в эти проверки и отправлять его клиенту. Чего в этой статье не объясняется, так это как прочитать эти данные в клиенте…
Для клиентской стороны подход отличается от типичного подхода fetch().then(). Я нашел другую статью, в которой показан рабочий пример чтения таких потоков из серверной части. Смотрите раздел Использование читаемых потоков на сайте Mozilla. В частности, посмотрите на большой пример кода, в котором используется функция ‘pump’. Это именно то, что я использовал для чтения данных из потоковой передачи из серверной части.
Извините, я не могу дать конкретный ответ на ваш вопрос, но я надеюсь, что ссылки помогут вам начать.