【问题标题】:"Internal server error" serverless node rest api“内部服务器错误”无服务器节点休息 api
【发布时间】:2019-03-05 17:39:52
【问题描述】:

我正在编写一个无服务器节点 rest api,我的功能很少,今天我遇到了从 lambda 函数向 api 网关发送响应的问题,我的回调没有按预期工作,我做错了什么?

module.exports.create = (event, context, callback) => {

  client.on('connect', () => {
      console.log("connected to redis");
      callback(null, {
        statusCode: 200,
        headers: { 'Content-Type': 'text/plain' },
        body: 'connection established.',
      });
      return;
  });

};

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda serverless


    【解决方案1】:

    好的,我之前遇到过几次Internal server error,我建议你这样做。

    首先,你必须具备一点背景知识:

    当您部署 serverless 应用程序时,幕后发生的事情是 serverless framework.serverless 文件夹下创建必要的配置和 .zip 文件(您的 lambda 函数代码和依赖项)。

    因此,如果您在 package.json 中缺少必要的依赖项,或者忘记将它们包含在 .zip 文件中,您的 lambda 将返回 Internal server error

    您还应该检查您是否也将dependencies 包含在dev-dependencies 中的package.json 中。 (这将阻止您的必要模块包含在.zip 文件中)。

    其次,如果您使用的是serverless-webpack 插件,则应将这些行包含在您的serverless.yaml 文件中。

    custom:
      webpack:
        includeModules: true
    

    这适用于我的情况。

    如果您不明白或有什么要问的,请随时这样做:)

    【讨论】:

      【解决方案2】:

      人们对 Lambda 和 NodeJS 的一个常见问题是时间......我认为这里发生的事情是 Lambda 函数在您的响应返回之前终止。 Lambda 不会等待异步响应,因此大部分时间不会执行响应事件,因此永远不会触发您的回调。

      尝试使用 Promise,它会保持代码/Lambda 运行,直到异步调用返回并调用回调。

      这是一篇关于如何实现这一目标的好文章:

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

      【讨论】:

        【解决方案3】:

        内部错误是指由于某种原因未命中返回,这可能是编码错误或超时,因为默认的无服务器超时对于您尝试执行的操作而言太低了。

        如果你想改变超时,你可以在 serverless.yml 中做这样的事情:

        functions:
          create:
            handler: handler/create
            timeout: 30
            ...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-06
          • 1970-01-01
          • 2021-01-18
          • 1970-01-01
          • 2023-03-10
          • 2014-06-24
          • 2013-05-04
          • 1970-01-01
          相关资源
          最近更新 更多