У меня проблемы с корсом. Когда я запрашиваю свой API без параметров, у меня нет проблем. Но когда я добавляю некоторые параметры, у меня возникают ошибки cors.
Когда я звоню / клиентам нет проблем, но когда я делаю / клиенты? Filter = {"acheteur": "1"}, я получаю Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant.
, что означает отсутствует
Вот мой serverless.yml:
clientsGetList:
handler: functions/clients/getList.main
events:
- http:
path: /clients
method: get
cors: true
request:
parameters:
paths:
filter: false
sort: false
range: false
Вот мой код:
import { success, failure } from "../../libs/response-lib";
import { AuroraDB } from '../../libs/aurora-lib';
export async function main(event, context, callback) {
try {
const params = event.queryStringParameters;
var query = `SELECT * from Clients`;
if (params) {
if (params.filter != null) {
// Filter example: filter={"vip":"Normal", "denomination":"Stanislas Girard", "vendeur": "false"}
query += " WHERE ";
const filters = JSON.parse(params.filter);
var number = 0;
for (const filt in filters) {
if (!Array.isArray(filters[filt])) {
if (number != 0) { query += " AND "; }
number++;
if (filters[filt] == "true" || filters[filt] == "false") {
query += filt + " IS " + filters[filt] + " ";
} else {
query += filt + " LIKE '" + filters[filt] + "' ";
}
} else {
if (number != 0) { query += " AND "; }
number++;
query += filt + " IN " + "(";
const arr = filters[filt];
var number2 = 0;
for (var val in arr){
var el = val;
if (number2 != 0) {
query += ",";
}
if (typeof arr[val] === 'string') {
el = "'" + arr[val] + "'";
}
query += el;
number2++;
}
query += ") ";
}
}
}
if (params.sort != null) {
// sort example: sort=["identifier","DESC"]
const sort = JSON.parse(params.sort);
query += "ORDER BY " + sort[0] + " " + sort[1] + " ";
}
if (params.range != null) {
//range example: range=[0, 1]
const range = JSON.parse(params.range);
query += " LIMIT " + range[0] + " , " + range[1];
}
}
let result = await AuroraDB.query(query);
return success({ status: true, result: result, lol: "Prout" });
} catch (e) {
return failure({ status: false, result: "", error: e });
}
}
А вот мой ресурс, импортированный с обработанными ошибками APIGateway cors
Resources:
GatewayResponseDefault4XX:
Type: 'AWS::ApiGateway::GatewayResponse'
Properties:
ResponseParameters:
gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
ResponseType: DEFAULT_4XX
RestApiId:
Ref: 'ApiGatewayRestApi'
GatewayResponseDefault5XX:
Type: 'AWS::ApiGateway::GatewayResponse'
Properties:
ResponseParameters:
gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
ResponseType: DEFAULT_5XX
RestApiId:
Ref: 'ApiGatewayRestApi'
И код, который создает ответ:
export function success(body)
{
return buildResponse(200, body);
}
export function failure(body)
{
return buildResponse(500, body);
}
function buildResponse(statusCode, body) { return {
statusCode: statusCode,
headers: {
'Access-Control-Allow-Origin': '*', // Required for CORS support to work
'Access-Control-Allow-Credentials': true // Required for cookies, authorization headers with HTTPS
},
body: JSON.stringify(body) };
}
У меня нет проблем с вызовом Postman, что нормально, поскольку Postman не применяет правила CORS. Но я не могу понять, почему у меня такие проблемы. Я следовал всем инструкциям без сервера.