“内部服务器错误”无服务器节点Rest API

时间:2018-09-30 10:35:45

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

我正在编写一个无服务器的节点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;
  });

};

3 个答案:

答案 0 :(得分:0)

好吧,我几次遇到Internal server error,建议您这样做。

首先,您必须具备一些背景知识:

在部署serverless应用程序时,实际情况是serverless framework在{{下创建了必要的配置和.zip文件(您的lambda函数代码和依赖项) 1}}文件夹。

因此,如果您在.serverless中缺少必需的依赖项,或者忘记将其包含在package.json文件中,则lambda将返回.zip

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

第二,如果您使用的是.zip插件,则应在serverless-webpack文件中包含这些行。

serverless.yaml

这适用于我的情况。

如果您不理解或有任何疑问,请随时:)

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

如果要更改超时,可以在serverless.yml中执行以下操作:

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