首页 > 解决方案 > HTTP 请求返回 400,但不能抛出错误

问题描述

尝试使用此请求发布功能。当我使用正确的 requestBody 运行它时,它工作正常,但如果 requestBody 无效,它会返回 HTTP 400 并失败,但无论我尝试抛出什么,或者这样,catch 块永远不会运行。任何人都可以帮忙吗?这是在 Node 中并使用请求包。

    const res = async() =>
    {
        try
        {
            const res = await request({
                method: "POST",
                url: "url",
                headers: {
                    "content-type": "application/json",
                    "authorization": "Basic " + Buffer.from(username + ":" + password).toString("base64")
                },
                body: JSON.stringify(requestBody)
            }, function(error, response, data)
            {
                if(response.statusCode == 201 || response.statusCode == 200)
                {
                    console.log(data);
                }
                else
                {
                    console.log("Fell into else block!");
                    throw new Error("POST failed!");
                }
            });
        }
        catch (error)
        {
            console.log("something went wrong!", error);
        }
    };

标签: postrequesttry-catchthrow

解决方案


由于 request 函数返回一个 promise 使用 catch 方法

const res = await request({
                method: "POST",
                url: "url",
                headers: {
                    "content-type": "application/json",
                    "authorization": "Basic " + Buffer.from(username + ":" + password).toString("base64")
                },
                body: JSON.stringify(requestBody)
            }, function(error, response, data)
            {
                if(response.statusCode == 201 || response.statusCode == 200)
                {
                    console.log(data);
                }
                else
                {
                    console.log("Fell into else block!");
                    throw new Error("POST failed!");
                }
            })
            .catch((error) => {
                console.log("something went wrong!", error);
            });

推荐阅读