Могу ли я форсировать SSR для страницы Nuxt? - PullRequest
0 голосов
/ 25 июня 2019

В приложении Nuxt мне нужно отобразить страницу с большим количеством данных, отображаемых на карте Google, полученных из файла .jsonl размером 100 МБ.Я использую fs.createReadStream внутри asyncData (), чтобы проанализировать данные и передать их компоненту Vue.Поскольку fs является модулем только на стороне сервера, это означает, что в приложении возникают ошибки при попытке отрисовки этой страницы на стороне клиента.

Мне бы хотелось, чтобы эта конкретная страница отображалась исключительно с использованием SSR, поэтому я могу использоватьв компоненте Vue.

Я думал об использовании специального промежуточного программного обеспечения Express для обработки данных, но это все равно приводит к загрузке десятков МБ на клиент, что недопустимо.Вы можете увидеть, как я запрашиваю его с помощью Axios в моем примере.

    async asyncData( {$axios} ) {

     const fs = require('fs');

      if (process.server) {
        console.log("Server");

        async function readData() {
          const DelimiterStream = require('delimiter-stream');
          const StringDecoder = require('string_decoder').StringDecoder;
          const decoder = new StringDecoder('utf8');

          let linestream = new DelimiterStream();
          let input = fs.createReadStream('/Users/Chibi/WebstormProjects/OPI/OPIExamen/static/stream.jsonl');

          return new Promise((resolve, reject) => {
            console.log("LETS GO");
            let data = [];
            linestream.on('data', (chunk) => {
              let parsed = JSON.parse(chunk);
              if (parsed.coordinates)
                data.push({
                  coordinates: parsed.coordinates.coordinates,
                  country: parsed.place && parsed.place.country_code
                });
            });

            linestream.on('end', () => {

              return resolve(data);
            });

            input.pipe(linestream);
          });
        }

        const items = await readData();
        return {items};
      } else {
        console.log("CLIENT");
        const items =  this.$axios.$get('http://localhost:3000/api/stream');
        return {items };
      }
}

Даже при правильной визуализации NUXT покажет мне наложение ошибки с жалобой на проблему.

enter image description here

...