微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

访问 graphql 端点时无服务器离线会引发错误 - 为什么会这样?

如何解决访问 graphql 端点时无服务器离线会引发错误 - 为什么会这样?

我正在设置一个使用 graphql(通过 apollo-server-lambda)并在 aws lambda 上运行的小应用程序。我的 serverless.yml 配置包含 serverless-webpack 以便对代码进行一些优化以加快这些 lambda 处理程序的冷启动速度。

当我运行 serverless offline start 时,应用程序似乎可以正常启动,但当我访问 http://localhost:3000/dev/graphql 时,我收到此错误

Error: offline: handler 'handler' in /home/stark/Work/app/backend/dist/service/src/app is not a function
    at InProcessRunner.run (/home/stark/Work/app/backend/node_modules/serverless-offline/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js:148:13)
    at processticksAndRejections (node:internal/process/task_queues:93:5)
    at LambdaFunction.runHandler (/home/stark/Work/app/backend/node_modules/serverless-offline/dist/lambda/LambdaFunction.js:325:20)
    at hapiHandler (/home/stark/Work/app/backend/node_modules/serverless-offline/dist/events/http/HttpServer.js:521:18)
    at module.exports.internals.Manager.execute (/home/stark/Work/app/backend/node_modules/@hapi/hapi/lib/toolkit.js:45:28)
    at Object.internals.handler (/home/stark/Work/app/backend/node_modules/@hapi/hapi/lib/handler.js:46:20)
    at exports.execute (/home/stark/Work/app/backend/node_modules/@hapi/hapi/lib/handler.js:31:20)
    at Request._lifecycle (/home/stark/Work/app/backend/node_modules/@hapi/hapi/lib/request.js:312:32)
    at Request._execute (/home/stark/Work/app/backend/node_modules/@hapi/hapi/lib/request.js:221:9)

我的 serverless.yml 如下所示:

service: app
provider:
  name: aws
  runtime: nodejs12.x
  region: us-east-1
  apiGateway:
    shouldStartNameWithService: true
functions:
  graphql:
    handler: src/app.handler
    events:
      - http:
          path: graphql
          method: post
          cors: true
      - http:
          path: graphql
          method: get
          cors: true
plugins:
  - serverless-dotenv-plugin
  - serverless-webpack
  - serverless-offline
custom:
  webpack:
    includeModules: true

我在 app.ts 中的处理程序(被编译为 app.js)再简单不过了:

module.exports.handler = async (event: APIGatewayProxyEvent,context: LambdaContext) => {
    console.log('Getting data...');
    console.log('success');
};

我也尝试使用 export const handler = ... 语法导出 - 结果相同。

我在 /home/stark/Work/app/backend/dist/service/src/app.js 打开文件,我看到 run 函数被正确转换和导出(或者看起来是这样):

module.exports.run = (event,context) => __awaiter(void 0,void 0,function* () {
    console.log('Getting data...');
    console.log('success');
});

我错过了什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。