【问题标题】:How to change status code of headers of response in serverless framwork?如何在无服务器框架中更改响应标头的状态码?
【发布时间】:2018-09-20 21:48:49
【问题描述】:

我想回复个人定义的状态码和一些标题。 但我发现即使我将状态码更改为 201,状态码仍然是 200。而且我定义的标题不在标题中。

我的处理程序喜欢:

function createResponse(status, header, body) {
return {
headers: Object.assign(header, {
  'Access-Control-Allow-Origin': '*',
  'Content-Type': 'application/json;charset=utf-8'
}),
statusCode: status,
body: JSON.stringify(body)
}
}
export const hello = async (event, context, cb) => { 
const rep = {
  message: 'v1.0',
  event: event
};
cb(null, createResponse(201, {}, rep));
return;
};

我使用 serverless.yml 我的配置是:

functions:
  first:
    handler: handlers/first.hello
    events:
      - http:
          method: ANY
          path: first
          integration: lambda

如何检查正确的代码可以更改状态代码和响应标头? 我还发现我的标头仍在响应正文中,如何在响应标头中添加我的标头部分?

如果您认为我的集成部分有问题,您能给我正确的配置示例吗?

【问题讨论】:

    标签: http-headers aws-lambda serverless


    【解决方案1】:

    看起来您在标题内有一个嵌套对象。

    参考文档,

    https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html

    这是发送正确响应的正确示例代码,

    exports.handler = function(event, context, callback) {
        console.log('Received event:', JSON.stringify(event, null, 2));
        var res ={
            "statusCode": 200,
            "headers": {
                "Content-Type": "*/*"
            }
        };
        res.body = "Hello, World !";
        callback(null, res);
    };
    

    希望对你有帮助。

    【讨论】:

    • 我认为你错了。我已经阅读了这个文档并且我做了同样的代码。但发现 json 反馈 {"statusCode":200,"headers":{"Content-Type":"/"},"body":"Hello, World !"}。这显然是 statusCode 不在响应头部分。它只是 json 响应体。
    • 您的集成不正确。您需要将集成更改为 ANY 并在 API Gateway 中使用 lambda 代理。您直接集成到 API Gateway,这导致了问题。
    • 如果我使用 serverless.yml 配置它,你能说得更清楚或给我正确的集成到 API Gateway 的例子。
    猜你喜欢
    • 2017-05-24
    • 2017-10-08
    • 1970-01-01
    • 2016-10-15
    • 2021-04-28
    • 1970-01-01
    • 2023-03-04
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多