AWS Lambda函数从不触发套接字流(nodejs)的on'data'函数

时间:2019-03-11 14:17:02

标签: node.js sockets events stream aws-lambda

我正在尝试使用nodejs的包装器wkhtmltoimage(https://www.npmjs.com/package/wkhtmltoimage),但是从未触发过'data'事件,这是我当前的代码:

exports.handler = async (event, context, callback) => {


    process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT'];
    const nodeStream = require('stream');

    const wkhtmltoimage = require('wkhtmltoimage').setCommand(__dirname + '/wkhtmltoimage');
    await new Promise(function(resolve, reject){
        try {

            const renderUrl = event["queryStringParameters"]['url'];    
            console.log('renderUrl: ', renderUrl);

            const socket = wkhtmltoimage.generate(renderUrl);
            const passThroughStream = new nodeStream.PassThrough();
            socket.setEncoding('binary');

            socket.pipe(passThroughStream);

            let body = '';
            passThroughStream.on('data', function(chunk) {                
                console.log('On data');   //This line is never called
                body += chunk;
            });            

            passThroughStream.on('end', function() {
                console.log('On end');
                resolve(body);            
            });


        } catch (error){
            console.log("Error: "  , error);
            reject(error);
        }  
    })
    .then(value => { callback(null,value); })
    .catch(error => { console.log('catch error'); callback(error); });      
}

我正在zip内部署二进制wkhtmltoimage,确保在zip文件夹内的所有文件上都运行chmod 755,我还在功能启动时添加了路径,这是怎么回事?

如果我在本地运行此功能(如下所示),则会得到所需的图像作为输出:

exports.handler({queryStringParameters:{url:'https://www.google.com'}}, null, function(err, value){
    require("fs").writeFile("out__3.png", value, 'binary', function(err) {
        console.log(err);
    });
})

我想念什么?谢谢!

编辑:我还尝试使用变量套接字而不是passThroughStream。

0 个答案:

没有答案