Search code examples
aws-lambdajsreport

Function works locally but not on AWS Lambda


I'm using jsreport to render HTML and generate a PDF file and it works locally, but on Lambda, it throws this error:

{
  "errorMessage": "Error during rendering report: Cannot read property 'filter' of undefined",
  "errorType": "TypeError",
  "stackTrace": [
    "Phantom.execute (/var/task/node_modules/jsreport-phantom-pdf/lib/phantom.js:169:53)",
    "/var/task/node_modules/jsreport-core/lib/render/render.js:118:23",
    "tryCatcher (/var/task/node_modules/bluebird/js/release/util.js:16:23)",
    "Promise._settlePromiseFromHandler (/var/task/node_modules/bluebird/js/release/promise.js:512:31)",
    "Promise._settlePromise (/var/task/node_modules/bluebird/js/release/promise.js:569:18)",
    "Promise._settlePromise0 (/var/task/node_modules/bluebird/js/release/promise.js:614:10)",
    "Promise._settlePromises (/var/task/node_modules/bluebird/js/release/promise.js:693:18)",
    "Async._drainQueue (/var/task/node_modules/bluebird/js/release/async.js:133:16)",
    "Async._drainQueues (/var/task/node_modules/bluebird/js/release/async.js:143:10)",
    "Immediate.Async.drainQueues (/var/task/node_modules/bluebird/js/release/async.js:17:14)",
    "runCallback (timers.js:672:20)",
    "tryOnImmediate (timers.js:645:5)",
    "processImmediate [as _immediateCallback] (timers.js:617:5)"
  ]
}

Same environment variables, same Node version.


Solution

  • As it turned out, it was a problem of this library: node-app-root-path.

    I fixed it by passing the correct rootDirectory option to jsreport.