NutellaAddict
NutellaAddict

Reputation: 584

How to send output image from node js child process to 'parent'?

I have a child process that is being called as follows:

server.js

app.get('/search', function (req, res) {
    var cp = spawn('node', 'app.js');
    cp.stdout.on('data', function(data) {
        console.log('stdout: ' + data);
    });
    ...
});

Currently app.js is utilizing chrome-headless' captureScreenshot function to generate a screenshot, which is then stored locally.

app.js:

    const img = await Page.captureScreenshot({format: 'png', fromSurface: true});
    fs.writeFile('./screenshot.png', img.data, 'base64', function (err) {
        if (err) {
            console.log(err);
        }
    });

It is not necessary to store the image locally, but rather upload it to a server. I am trying to find a way to get this functionality to work:

server.js V2

app.get('/search', function (req, res) {
    var cp = spawn('node', 'app.js');
    cp.stdout.on('data', function(data) {
        upload_image(data);
    });
    ...
});

app.js V2

    const img = await Page.captureScreenshot({format: 'png', fromSurface: true});
        //EXPOSE 'img' to parent via cp.stdout - How do I do this part?
    });

Upvotes: 2

Views: 556

Answers (1)

squiroid
squiroid

Reputation: 14027

You can send messages via fork()

server.js

const { fork } = require('child_process');
app.get('/search', function (req, res) {
    const forked = fork('app.js');
    forked.on('message', (data) => {
      uploadImage(data.imageURL); // It will be send by parent.
    });        ...
});

app.js

const img = await Page.captureScreenshot({format: 'png', fromSurface: true});
fs.writeFile('./screenshot.png', img.data, 'base64', function (err) {
    if (err) {
        console.log(err);
    }
   process.send({ imageURL: './screenshot.png' }); //You can send any data from here.
});

Here is the nice tutorial for you.

https://medium.freecodecamp.org/node-js-child-processes-everything-you-need-to-know-e69498fe970a

I hope it helped you.

Upvotes: 1

Related Questions