#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». на странице вы можете добавить пользовательский заголовок в поле «Управление доступом-Разрешить-заголовки».