Can I force SSR for a Nuxt page?

Viewed 677

In a Nuxt app I need to render a page with a lot of data displayed on a google map, obtained from a 100MB .jsonl file. I'm using fs.createReadStream inside asyncData() to parse the data and feed it to the Vue component. Since fs is a server-side only module, this means my app errors when it attempts to render that page client-side.

I would like it so this specific page will exclusively be rendered with SSR so I can use fs in the Vue component.

I thought of using a custom Express middleware to process the data, but this still results in downloading dozens of MB to the client, which is unacceptable. You can see how I request it with Axios in my example.

    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 };
      }
}

Even when it renders correctly, NUXT will show me an error overlay complaining about the issue.

enter image description here

0 Answers
Related