我正在尝试使用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。