如何为无服务器功能设置默认状态码?
问题描述:
我正在使用无服务器将微服务部署到AWS Lambda上。我想设置默认状态码为500,如果HTTP过程成功,那么我想要响应状态码为200.如何做到这一点?这可以通过serverless.yml
文件完成吗?如何为无服务器功能设置默认状态码?
功能:
addPermission:
handler: permissionadd.handler
events:
- http:
path: permission
method: post
cors: true
integration: lambda
request:
parameters:
querystrings:
companyId: true
userId: true
答
我不认为你可以通过serverless.yml做到这一点。
你可以从处理这样做:
当前标准的,任何和失败,不指定特定的状态代码或不正确地返回响应到API网关的所有拉姆达的调用是假定为Http状态500(内部服务器错误)。
不过,假设你想返回一个自定义HTTP代码,那么你可以使用的财产以后这样的:
module.exports.my_sample_func = (event, context, callback) ={
var processed_promise = process_your_event(event_body);
// define your default response to be returned
let my_default_response = {
statusCode:500, // add default faliure http code
body:JSON.stringify({error: "Some error occured"}),
headers: {
'Content-Type': 'application/json'
}
};
processed_promise.then(function(resolved, rejected){
// whatever had to be done got completed successfully
response.statusCode = 200;
response.body = JSON.stringify({msg: "Processed successfully"});
callback(null, response);
})
.catch(function(rejected){
callback(response);
});
}
希望这会有所帮助。
+0
此外,您还可以在serverless.yml中将默认状态设置为环境变量,并在您的处理程序中对其进行访问。但是你仍然必须写一些逻辑来处理你的处理器。 – mightymosquito
你的处理程序代码不应该包含逻辑吗?你正在使用哪个SDK? – kosa
我不希望处理程序控制状态码,因为处理程序中的javascript错误不会响应状态码。 – suku
'因为处理程序中的javascript错误不会响应':您可以使用catch/catch返回代码500的try/catch。关于默认代码,我不知道是否有内置。 – Zanon