繁体   English   中英

html-pdf package 不适用于 aws lambda

[英]html-pdf package is not working on aws lambda

我已经尝试在部署在AWS lambda的代码中实现html-pdf package,但即使我在 lambda 部署了 html-pdf package 的后也会出现错误。下面是我的代码:

import pdf from 'html-pdf';
import AWS from 'aws-sdk';

var S3 = new AWS.S3();
process.env.PATH = `${process.env.PATH}:/opt`;
process.env.FONTCONFIG_PATH = "/opt";
process.env.LD_LIBRARY_PATH = "/opt";

export const convertToPDFandUpload = async (attachmentFile, empCertificate) => {
    let file;
    let params;
    var options = {
        height: "590px",
        width: "800px",
        phantomPath: '/opt/phantomjs_linux-x86_64'
    };

    return new Promise((resolve, reject) => {
        pdf.create(attachmentFile, options).toBuffer(function (err, res) {
            if (err)
                console.log(err);
            file = res;
            params = {
                Bucket: <my_bucket_name>,
                Key: `certificate/${empCertificate.candidateName}${empCertificate.certificateID}.pdf`,
                Body: file,
                ACL: 'public-read'
            };
            S3.upload(params, async function (err, data) {
                if (err) {
                    console.log(err, err.stack);
                    reject(null);
                } else {
                    resolve(data.Location);
                }
            });
        });
    });
};

它在 toBuffer() function 之后抛出错误。

错误:{“errorType”:“TypeError”,“errorMessage”:“无法读取未定义的属性'文件名'”,“堆栈”:[“TypeError:无法读取未定义的属性'文件名'”,“在execPdfToBuffer(/ var /task/apis/webpack:/home/nikhilsrivastva/Desktop/HR Onboarding/onboarding BE/hronboardingcodebase/services/certification/node_modules/html-pdf/lib/pdf.js:48:1)", " at ChildProcess.respond ( /var/task/apis/webpack:/home/nihilsrivastva/Desktop/HR Onboarding/onboarding BE/hronboardingcodebase/services/certification/node_modules/html-pdf/lib/pdf.js:144:1)", " 在 ChildProcess.发出(events.js:314:20)”,“在 ChildProcess.EventEmitter.emit(domain.js:483:12)”,“在 Process.ChildProcess._handle.onexit(内部/child_process.js:276:12) “]}

zip 层文件必须包含一个名为“nodejs”的文件夹,并且该文件夹必须包含具有您的依赖项的“node_modules”文件夹。 在此处查看确切的结构: https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path

适用于 Node.js 的 AWS X-Ray SDK 的示例文件结构

`xray-sdk.zip └ nodejs/node_modules/aws-xray-sdk`

因此,您可以验证您的层 zip 文件具有正确的结构。

在选项中,设置localUrlAccess: true ,我遇到了同样的问题,这解决了它。

var options = {
  height: "590px",
  width: "800px",
  phantomPath: '/opt/phantomjs_linux-x86_64',
  localUrlAccess: true
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM