Nodejs Error: write EPIPE error in Amazon Linux production environment. No issue on windows, but only getting EPIPE error on Linux Server

49 Views Asked by At

I am using "pdf-creator-node" npm to generate pdf file using nodejs. Initially i am loading html with dynamic data along with base64 image data to create pdf file. It is working fine locally on Windows, but an EPIPE error is occurring on Amazon Linux production server. Anybody provide me a solution as soon as possible.

node:events:368
      throw er; // Unhandled 'error' event
      ^
Error: write EPIPE
    at afterWriteDispatched (node:internal/stream_base_commons:164:15)
    at writeGeneric (node:internal/stream_base_commons:155:3)
    at Socket._writeGeneric (node:net:795:11)
    at Socket._write (node:net:807:8)
    at writeOrBuffer (node:internal/streams/writable:389:12)
    at _write (node:internal/streams/writable:330:10)
    at Socket.Writable.write (node:internal/streams/writable:334:10)
    at PDF.PdfExec [as exec] (/bec/api/2.4/node_modules/html-pdf/lib/pdf.js:156:15)
    at PDF.PdfToFile [as toFile] (/bec/api/2.4/node_modules/html-pdf/lib/pdf.js:85:8)
    at /bec/api/2.4/node_modules/pdf-creator-node/index.js:69:20
Emitted 'error' event on Socket instance at:
    at emitErrorNT (node:internal/streams/destroy:157:8)
    at emitErrorCloseNT (node:internal/streams/destroy:122:3)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  errno: -32,
  code: 'EPIPE',
  syscall: 'write'
}

This is my code below:

           try {
                data = await Payment.find({ student: id});
                if (fs.existsSync("./public/documentformats/StudentApplicationForm.html")) {
                    let filename = "Student_Basic_Admission_Details_"+randomize('A0', 10)+"_"+moment(new Date()).format("YYYY-MM-DD")+".pdf";
                    let html = await fs.promises.readFile('./public/documentformats/StudentApplicationForm.html', 'utf8');
                    let studentFormHeader = null;
                    if(data[0].college.studentFormHeader && data[0].college.studentFormHeader.path && fs.existsSync(data[0].college.studentFormHeader.path)){ 
                        try {
                            let imageBuffer = await fs.promises.readFile(data[0].college.studentFormHeader.path);
                            let base64Image = imageBuffer.toString('base64');
                            studentFormHeader = `data:image/png;base64,${base64Image}`;

                            let bgPage1 = await fs.promises.readFile('./public/documentformats/StudentApplicationFormPage1.jpg');
                            let base64Page1 = bgPage1.toString('base64');
                            data[0].firstPage = `data:image/png;base64,${base64Page1}`;

                            let bgPage2 = await fs.promises.readFile('./public/documentformats/StudentApplicationFormPage2.jpg');
                            let base64Page2 = bgPage2.toString('base64');
                            data[0].secondPage = `data:image/png;base64,${base64Page2}`;
                        } catch (error) {
                            console.error('Error reading files:', error);
                            throw error;
                        }
                    }
                    data[0].header = studentFormHeader;
                    let options = {
                        "format": 'A3',
                        ReportBody: {
                            contents: `<img src=${data[0].header} style="display:none"><img src=${data[0].header} style="display:none">`
                        },
                    }
                    let mydir = './public/exports/basicdetails';
                    if (!fs.existsSync(mydir)) {
                        fs.mkdirSync(mydir);
                    }
                    let document = {
                        html: html,
                        data: {
                            admission: data[0]
                        },
                        path: `./public/exports/basicdetails/${filename}`
                    };
                    try {
                        await pdf.create(document, options);
                        return {file : filename};
                    } catch (error) {
                        console.error("Error generating PDF:", error);
                        throw error;
                    }
                } else {
                    console.log(`The client file format does not found. `);
                    return null;
                }
            } catch (error) {
                console.error("Error in generating admission details:", error);
                throw error;
            }
0

There are 0 best solutions below