Я пытаюсь использовать оболочку 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.