我正在使用Reactjs个Web应用程序.在那里我要调用Nodejs RestAPI.

当API返回状态码400时,我无法得到来自API的错误消息.

我无法从API响应中获取errorDesc.

400 error API response

{
  "errorCode": "M400",
  "message": "Invalid Request",
  "errorDesc": "missing required first name field"
}

React code:

fetch(URL, {
            method: 'POST',
            body: data
        })
            .then(response => {
                if (!response.ok) {
                    if (response.status == 400) {
                        Modal.error({
                            className: "ErrorModal",
                            title: "Error",
                            content: "Invalid Request.",
                        });
                    }
                    return Promise.reject(response.statusText);
                }
                return response.json();
            })
            .then(status => {
                
            })
            .catch(error => {
                console.log(error);
            });

推荐答案

要获取错误响应的内容,您需要读取响应的正文.

它可能不是json,但如果您碰巧知道它是json,您只需使用response.json(),就像您对实际有效结果所做的那样.

或者,使用response.text()来获取文本版本,如果您愿意,以后仍然可以将其解析为json.

一种可能的方法

fetch(URL, {
            method: 'POST',
            body: data
        })
            .then(response => {
                if (!response.ok) {
                    if (response.status == 400) {
                      return response.json().then((error) => {
                      
                        Modal.error({
                            className: "ErrorModal",
                            title: error.message || 'Invalid Request',
                            content: error.errorDesc || '',
                        });
                        return Promise.reject(response.statusText);
                      });
                    } else {
                      return Promise.reject(response.statusText);
                    }
                }
                return response.json();
            })
            .catch(error => {
                console.log(error);
            });

Node.js相关问答推荐

如何在node.js中以随机顺序调用函数并按顺序操作

Sveltekit停靠的应用程序找不到从Build导入的包

如何更改ejs中的镜像src,以防从OMDB API获取的某些镜像具有src=N/A

npm 在 Windows 终端中不工作

Indexeddb 获取所有不同于特定值的记录

我应该如何解决这个 Angular node 包模块依赖冲突?

Next.js 在我的电脑上没有构建错误,但它们在使用 Vercel 部署时发生

使用 NPM 三个 mocha+typescript 进行测试

为什么 $or 在带有正则表达式的mongoose 中不能正常工作

多字段传递获取查询失败

Node.js 变量声明和范围

在本地运行 Cloud Functions 会出现错误functions.config() 不可用

Node.js、Cygwin 和 Socket.io 走进一家wine 吧……Node.js 抛出 ENOBUFS,所有人都死了

在 express 中添加故意延迟

有人在 NodeJS 中实现过 wiki 吗?

node.js 模块和函数中this的含义

如何从 findOneAndUpdate 方法中获取更新的文档?

Meteor - collection.find() 总是返回所有字段

如何忽略文件 grunt uglify

NodeJS 中的 HTTPS 请求