提问人:goxarad784 提问时间:8/7/2023 更新时间:8/7/2023 访问量:62
在执行 await fetch 时获取 response.message 自定义消息
Getting response.message custom message when doing await fetch
问:
我的 Nodejs express 后端中有一个错误处理程序,可以捕获一些错误并将其发送到客户端:
res.status(error.status|| 500).json({
status: error.status||500,
message: 'MY CUSTOM ERROR MESSAGE',
stack: error.stack
})
我使用jquery ajax的时间最长,并且总是能够像这样从后端获取消息的值:
$.ajaxSetup({
error(jqXHR, exception) {
$('#divSubmitButtonSpinAnimation').addClass('d-none');
console.log(jqXHR);
console.log(exception);
$.toast({
position: 'top-right', /** top-left/top-right/top-center/bottom-left/bottom-right/bottom-center - Where the toast will show up * */
dismissible: true, /** true/false - If you want to show the button to dismiss the toast manually * */
stackable: true, /** true/false - If you want the toasts to be stackable * */
pauseDelayOnHover: true, /** true/false - If you want to pause the delay of toast when hovering over the toast * */
title: jqXHR.statusText,
subtitle: jqXHR.status,
content: (jqXHR.responseJSON) ? jqXHR.responseJSON.message : 'Unspecified Error',
type: 'error',
delay: 5000,
});
return false;
},
});
但是,我现在正在研究上传文件的能力,并且在使用 jquery ajax 时遇到了问题,所以我决定开始使用 await fetch api。我的大部分工作都工作,除了,我无法再读取的值,因为它未定义。response.message
const response = await fetch(
'/getStudentInfo',
{
headers: {
Accept: 'application/json',
},
method: 'POST',
body: formData,
},
);
if (response.status === 200) {
return response.json();
}
console.log(response.message)
response.message 未定义,但 response.status 为 500,response.statusText 为“内部服务器错误”,这是预期的,因为我从服务器发送错误 500。
答:
0赞
goxarad784
8/7/2023
#1
所以看起来我必须将响应转换为才能获得消息属性。所以我做的是这样的。json
const response = await fetch(
'/createInspectionDetail',
{
headers: {
Accept: 'application/json',
},
method: 'POST',
body: formData,
},
);
if (response.status === 200) {
return response.json();
}
const data = await response.json();
createGenericMessage('Error', data.message, 'danger');
显然这是必要的,因为 reponse 本身就是另一个承诺,一旦标头到达,我们就会到达,因此我们仍然需要等待它以获取更多信息:
在此处阅读更多详细信息:
1赞
Bergi
8/7/2023
#2
即使 http 状态不是 200,仍需要调用才能访问响应正文中的消息。response.json()
const response = await fetch('/getStudentInfo', {
headers: {
Accept: 'application/json',
},
method: 'POST',
body: formData,
});
const data = response.headers.get("content-type")?.startsWith("application/json"))
? await response.json()
: await response.text();
if (response.ok) {
console.log(data);
} else {
console.error(data.message);
}
评论
try... catch
try...catch
当有响应 500 时,catch 块不会触发。当我把它包装起来时,try catch is 返回状态 500,但不转到 catch 块