Как заставить лямбда работать с ajax?

Я получаю 403 запрещено при выполнении запроса ajax к конечной точке лямбда. Вероятно, это проблема 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);
            }
        });
    };

```

Я попытался включить CORS на шлюзе API, но получаю ошибку с неверным кодом ответа.

введите здесь описание изображения

Можете ли вы подсказать, как исправить ошибку и чем она может быть вызвана?


person Vlad Vinnikov    schedule 08.12.2016    source источник
comment
Какое сообщение об ошибке вы получаете? Наведите красный восклицательный знак   -  person Benny Bauer    schedule 11.12.2016


Ответы (3)


убедитесь, что вы развернули API после внесения каких-либо изменений, например добавления CORS. Меня это несколько раз кусало.

person Chris Love    schedule 08.12.2016

Если вы используете интеграцию «прокси» HTTP или Lambda, метод без OPTIONS должен будет возвращать соответствующие заголовки CORS (в данном случае Access-Control-Allow-Origin). Две ошибки, которые вы видите в консоли, допустимы, если вы используете интеграцию прокси для метода GET. Настройте бэкэнд на отправку заголовка Access-Control-Allow-Origin и повторите попытку.

person jackko    schedule 08.12.2016

Если вы используете Serverless Framework, вы можете легко сделать это, указав cors: true в http-событии вашей функции:

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

Дополнительную информацию можно найти в документации.

person Benny Bauer    schedule 08.12.2016
comment
Заголовок "Access-Control-Allow-Origin" : "*" отображается в браузере, но не возвращает заголовок, когда я вызываю AJAX. - person Vlad Vinnikov; 08.12.2016