У меня есть следующий код для создания запросов POST. Я не уверен на 100% об обработке ошибок здесь, но для меня было важно, чтобы я получил текст тела, когда запрос не был успешным.Получить полезную нагрузку, вызвавшую ошибку json parse в Fetch
Одна из проблем, которые у меня до сих пор есть, - если сервер отвечает 200, но недействителен json - могу ли я зарегистрировать эту полезную нагрузку? Что было бы правильным способом регистрации для Fetch?
Fetch(data.notificationUrl, {
method: 'POST',
body: post_data,
headers: {
'Content-Type': 'application/json'
}
}).then((res) => {
if (!res.ok) {
// Could reject the promise here but than response text wouldn't be available
//return Promise.reject(`Response was not OK. Status code: ${res.status} text: ${res.statusText}`);
return res.text().then((txt) => `Response was not OK. Status code: ${res.status} text: ${res.statusText}.\nResponse: ${txt}`);
}
// response ok so we should return json, could follow https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch and determine the payload type by content-type header...
return res.json();
}).then((response) => {
if (response) {
// set result
// ...
// redirect
return reply.redirect(data.redirectUrlDirectory);
}
return reply(Boom.preconditionFailed(`Did not reply with correct payload! json:'${JSON.stringify(response)}'`));
}).catch((err) => {
return reply(Boom.badData(`Could not notify on url ${data.notificationUrl} about the payment ${id}.\nError: "${err}"`));
});
'res.json()' вернет действительный json, если тело «обрабатывается» JSON. Если метод json не работает, вы должны «поймать» его, это обещание в любом случае. –
, так что это был мой вопрос: что, если тело не было подвержено анализу JSON? как его читать? – Karpik