В моей среде разработки у меня установлена локальная копия Dynamodb с использованием Reactjs для подключения к ней. Я использую AWS SDK, в частности метод запросов для Dynamodb, для выполнения запросов.
Когда запрос правильно структурирован, он работает нормально. Однако, если запрос плохо структурирован, я получаю загадочный ответ. Консоль Chrome дает мне:
POST http://localhost:8000/ 400 (Bad Request)
Access to XMLHttpRequest at 'http://localhost:8000/' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
где localhost: 8000 указывает на локальный экземпляр Dynamodb, а localhost: 3000 указывает на экземпляр реагирования.
Самое главное, я не получаю сообщение об ошибке, касающееся конкретно моей ошибки. Например, я мог бы проецировать поле с зарезервированным словом, которое тогда не должно корректно работать. Тем не менее, я ожидал бы ошибку, говорящую «такое-то и такое-слово зарезервировано», а не это дело CORS.
Кроме того, когда я выполняю тот же запрос с моего сервера узлов, я получаю правильное сообщение об ошибке. Это заставляет меня задуматься, не связана ли эта проблема с реакцией как-то.
Есть ли способ получить правильное сообщение об ошибке в моей среде разработки, как я описал? Спасибо.
Edit:
Как и просили в комментариях, вот типичный способ получения данных. Обратите внимание, что это рабочий запрос, поэтому он не генерирует ошибку. Однако, по мере разработки, это будет тип запроса, в котором я буду делать ошибки и не получать хорошие отзывы.
// define tableName, indexName
async componentDidMount() {
// properties include an initiated docClient and organizationId
const [posts] = await Promise.all([ // typically I will fetch more than just posts (omitted for brevity)
new Promise((resolve, reject) =>
this.props.docClient.query(
{
TableName: tableName,
IndexName: indexName,
KeyConditionExpression: 'SortKey = :sortKey',
ExpressionAttributeValues: {
':sortKey': this.props.organizationId + delimiter + 'POST-Date'
},
ProjectionExpression: 'chatTitle, creatorName, creatorEmail, PostId, creationTime, #text, #data, lastModifiedTime, #status, mentions, attachments, chatType, creatorType',
ExpressionAttributeNames: { '#text': 'text', '#status': 'status', '#data': 'Data' }
},
(err, data) => {
if (err) {
reject(err);
return;
}
resolve(data.Items);
}
)
)
]);
// do something with posts, etc...
}
docClient генерируется в компоненте с использованием:
new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'})
где AWS - это модуль aws-sdk