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