2017-04-21 93 views
1

我正在使用无服务器将微服务部署到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 
+0

你的处理程序代码不应该包含逻辑吗?你正在使用哪个SDK? – kosa

+0

我不希望处理程序控制状态码,因为处理程序中的javascript错误不会响应状态码。 – suku

+0

'因为处理程序中的javascript错误不会响应':您可以使用catch/catch返回代码500的try/catch。关于默认代码,我不知道是否有内置。 – Zanon

回答

1

我不认为你可以通过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

相关问题