Как хранить и обрабатывать строку больших данных (около 2 мб) в node js

#node.js #mongodb #mongoose

#node.js #mongodb #mongoose

Вопрос:

У меня есть интерфейс в angular, а API — в nodejs. Интерфейс отправляет мне зашифрованный файл, и прямо сейчас я сохраняю его в MongoDB. Но когда я отправляю этот файл во внешний интерфейс, вызов иногда прерывается. Поэтому, пожалуйста, подскажите мне, как я могу решить эту проблему с прерыванием вызова.

Ответ №1:

Ваш вопрос не особенно ясен. Насколько я понимаю, вы хотите отправить большой файл из серверной части Node клиенту. Если это правильно, то читайте дальше.

У меня была похожая проблема, из-за которой длительный вызов API занимал несколько минут, чтобы скомпилировать данные и отправить один большой ответ обратно клиенту. Эта проблема, с которой я столкнулся, была таймаутом, и я не смог ее продлить.

С помощью Node вы можете использовать «потоки» для потоковой передачи данных по мере их доступности клиенту. Этот подход действительно хорошо сработал для меня, поскольку сервер передавал данные в потоковом режиме, клиент их считывал. Это позволило обойти проблему с таймаутом, поскольку между сервером и клиентом часто происходит «болтовня».

Понимание использования Streams действительно заняло немного времени, и я потратил некоторое время на чтение различных статей и примеров. Тем не менее, как только я понял, это было довольно просто реализовать.

Эта статья о потоках узлов на сайте freeCodeCamp превосходна. Он содержит действительно полезный пример, где создается очень большой текстовый файл, который затем «передается» клиенту с помощью streams. Здесь показано, как вы можете читать текстовый файл «фрагментами», вносить преобразования в эти проверки и отправлять его клиенту. Чего в этой статье не объясняется, так это как прочитать эти данные в клиенте…

Для клиентской стороны подход отличается от типичного подхода fetch().then(). Я нашел другую статью, в которой показан рабочий пример чтения таких потоков из серверной части. Смотрите раздел Использование читаемых потоков на сайте Mozilla. В частности, посмотрите на большой пример кода, в котором используется функция ‘pump’. Это именно то, что я использовал для чтения данных из потоковой передачи из серверной части.

Извините, я не могу дать конкретный ответ на ваш вопрос, но я надеюсь, что ссылки помогут вам начать.