alixaxel / chrome-aws-lambda

Chromium Binary for AWS Lambda and Google Cloud Functions
MIT License
3.17k stars 289 forks source link

[BUG] Error while using javascript #271

Open dungeon2567 opened 2 years ago

dungeon2567 commented 2 years ago

Expected Behavior

No error happening

Current Behavior

This error: { "errorType": "Runtime.UserCodeSyntaxError", "errorMessage": "SyntaxError: Invalid or unexpected token", "trace": [ "Runtime.UserCodeSyntaxError: SyntaxError: Invalid or unexpected token", " at _loadUserApp (/var/runtime/UserFunction.js:218:13)", " at Object.module.exports.load (/var/runtime/UserFunction.js:279:17)", " at Object. (/var/runtime/index.js:43:34)", " at Module._compile (internal/modules/cjs/loader.js:1085:14)", " at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)", " at Module.load (internal/modules/cjs/loader.js:950:32)", " at Function.Module._load (internal/modules/cjs/loader.js:790:12)", " at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)", " at internal/main/run_main_module.js:17:47" ] }

Steps to Reproduce

async function launchBrowser() {
    try {
        const chromium = require('chrome-aws-lambda');
        console.info('launching chrome-aws-lambda browser');
        const browser = await chromium.puppeteer.launch({
            args: chromium.args,
            defaultViewport: chromium.defaultViewport,
            executablePath: await chromium.executablePath,
            headless: chromium.headless,
            ignoreHTTPSErrors: true,
        });
        return browser;
    } catch (e) {
        console.log(e);
    }
    finally {
        console.info('launching puppeteer browser');
    }
}

async function lambdaHandler(event, context) {
    console.info(`EVENT ${JSON.stringify(event, null, 2)}`);
    const browser = await launchBrowser();
    console.info('browser launched');
    const page = await browser.newPage();
    console.info('opened new tab');
    let bodyText = '';
    try {
        await page.goto(event.url, {
            waitUntil: 'networkidle0',
            timeout: 10 * 1000,
        });
        console.info('page opened');
        const stream = await page.pdf();
        bodyText = stream.toString("base64");
        console.info('pdf created');
    } finally {
        console.info('finally');
        await page.close();
        console.info('page closed');
        await browser.close();
        console.info('browser closed');
    }

    return {
        statusCode: 200,
        isBase64Encoded: true,
        headers: { "Content-type": "application/pdf" },
        body: bodyText
    };
}

module.exports = { handler: lambdaHandler };

Dockerfile: FROM amazon/aws-lambda-nodejs:latest

COPY ./* ${LAMBDA_TASK_ROOT} RUN npm install --only=prod

CMD [ "index.handler" ]