Лямбда-функция AWS никогда не запускает функцию «data» потока сокетов (nodejs) - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь использовать оболочку wkhtmltoimage nodejs (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); });      
}

Я развертываю двоичный файл wkhtmltoimage внутри zip, я убедился, что запускаю chmod 755 для всех файлов в папке zip, я также добавил путь при запуске функции, что здесь не так?

Если я запускаю эту функцию локально (как показано ниже), я получаю желаемое изображение в качестве вывода:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...