используйте middy, чтобы разрешить пользовательские заголовки

#node.js #aws-lambda #middy

#node.js #aws-lambda #middy

Вопрос:

Я использую middy для обработки промежуточного программного обеспечения для моего лямбда-кода AWS. Ниже приведен мой код:

 const middy = require('middy')
const middlewares = require('middy/middlewares')

const handlerWrapper = (handler) => middy((event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = false;
  let code = 200  
  context.send = (body) => callback(null,{
    statusCode: code,
    body: JSON.stringify(body)
  })

  context.status = (_code) => {
    code = _code
    return context
  }

  return handler(event, context ,callback)
}).use(middlewares.jsonBodyParser()).use(middlewares.cors())
  

Проблема в том, что мой интерфейс отправляет пользовательский заголовок с именем authorizationv2 , и когда мой интерфейс попытался отправить запрос на мой AWS lambda-код, браузер отобразит эту ошибку

Access to XMLHttpRequest at 'https://apiv2.website.com/data/list/' from origin 'http://admin.website.com' has been blocked by CORS policy: Request header field authorizationv2 is not allowed by Access-Control-Allow-Headers in preflight response.

Поэтому я предполагаю, что для исправления этого мне нужно middy разрешить пользовательский заголовок authorizationv2 . Я не совсем уверен, как это сделать с помощью middy.

Ответ №1:

Вам нужно добавить пользовательский заголовок в предполетный ответ. Два способа сделать это:

  • если вы используете бессерверную платформу для развертывания ресурсов, добавьте пользовательский заголовок в определение функции, как показано ниже:
     yourfunctionname:
    handler: path/to/handler
    events:
      - http:
          path: path/to/endpoint
          method: get
          cors:
            origin: "*"
            headers:
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              - X-Amz-Security-Token
              - X-Amz-User-Agent
              - <your-custom-header-goes-here>
  
  • ручной способ: перейдите в AWS API Gateway и найдите свой ресурс API. Нажмите «Действие» -> «Включить CORS». на странице вы можете добавить пользовательский заголовок в поле «Управление доступом-Разрешить-заголовки».