如何让lambda与ajax一起工作?

时间:2016-12-08 17:14:38

标签: amazon-web-services aws-lambda aws-api-gateway serverless-framework

在向lambda端点发出ajax请求时,我禁止403。 它可能是一个CORS问题。

serverless.yml

    service: aws-nodejs # NOTE: update this with your service name
    provider:
    name: aws
    runtime: nodejs4.3

    functions:
    weather:
        handler: handler.weather
        events:
            - http:
                path: weather
                method: get
                cors: true

handler.js

'use strict';

    var request = require('request');

    module.exports.weather = (event, context, callback) => {
        request('http://api.openweathermap.org/data/2.5/weather?APPID=__ID__&lat=40.66&lon=-73.77', function (error, response, body) {
            if (!error && response.statusCode == 200) {
                const response = {
                    statusCode: 200,
                    headers: {
                        "Content-Type": "application/json",
                        "Access-Control-Allow-Origin": "*"
                    },
                    body: body
                };
                callback(null, response);
            }
        });
    };

```

我尝试在API网关中启用CORS,但是我收到无效的响应代码错误。

enter image description here

您能否建议如何修复错误以及可能导致错误的原因?

3 个答案:

答案 0 :(得分:2)

确保在进行任何更改后部署API,例如添加CORS。这几次我被咬了。

答案 1 :(得分:1)

如果您正在使用HTTP或Lambda'代理'集成时,非OPTIONS方法必须返回相关的CORS头(在本例中为Access-Control-Allow-Origin)。如果您在GET方法上使用代理集成,那么您在控制台中看到的两个错误就可以了。配置后端以发回Access-Control-Allow-Origin标头,然后重试。

答案 2 :(得分:0)

如果您使用的是无服务器框架,可以通过在函数的http事件下指定cors: true轻松完成:

functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: user/create
          method: get
          cors: true

您可以在docs

中找到更多详细信息