Синхронный дочерний процесс NodeJs

avatar
sheetaldharerao
9 августа 2021 в 06:28
76
0
0

Я пытаюсь создать модуль генерации сертификатов с помощью nodeJS.
API для создания сертификата выглядит следующим образом:

// Create certificate

const express = require('express');
const router = express.Router();
const { createCanvas } = require('canvas')
const fs = require("fs");
const { decodeBase64Image } = require('../helper/certificatehelper');

router.post('/imageadd', async (req, res, next) => {
  try {

    const { name } = req.body;
    
    const width = 1920
    const height = 1080

    const canvas = createCanvas(width, height)
    const context = canvas.getContext('2d')
    context.fillStyle = "white";
    context.fillRect(0, 0, width, height)

    context.fillStyle = '#000'
    context.font = "72px Arial";
    context.textAlign = "center";
    context.fillText(name, 900, 500);

    const dataurl = canvas.toDataURL();

    const decodedImg = decodeBase64Image(dataurl);
    const imageBuffer = decodedImg.data;
    
    fs.writeFileSync(`./src/images/image1.png`, imageBuffer);

    fs.readFile('./src/images/image1.png', function(err, data) {
      if (err) throw err; // Fail if the file can't be read.
        res.writeHead(200, {'Content-Type': 'image/jpeg'});
        res.end(data); // Send the file data to the browser.
    });

    res.json({ data: respArray, success: true, msg: 'Certificate generated' });
  } catch (error) {
    res.json({ success: false, msg: error.message });
  }
})


module.exports = router;

Проблема, с которой я столкнулся, заключается в том, что если несколько запросов отправляются параллельно, как мне создать один сертификат за раз (синхронизированный).
Другие запросы должны ждать, пока не будет сгенерирован сертификат для предыдущего запроса.
Сертификаты должны создаваться в отдельном процессе от основного процесса приложения.
Как решить указанную выше проблему.

Источник
Ayush Gupta
9 августа 2021 в 06:32
0

Отвечает ли это на ваш вопрос? Как реализовать блокировку в JavaScript

derpirscher
9 августа 2021 в 06:57
0

Прежде всего, вы не должны использовать writeFileSync на сервере, потому что это блокирует. Кроме того, вы, кажется, отправляете несколько ответов (json и буфер), которые не будут работать. И на самом деле я не понимаю, почему несколько параллельных запросов могут быть проблемой? Вам вообще не нужно записывать файл (жестко заданное имя файла действительно будет проблемой). Просто используйте в буферах памяти

Ответы (0)