首页 > 解决方案 > 获取中的状态 201

问题描述

我有下面的 JS 代码,即返回状态 201在此处输入图像描述

我正在与本地服务器一起工作,一旦我在迅雷客户端检查它就可以正常工作,如下所示:

在此处输入图像描述

我的代码是:

async function send(params) {
    var path = document.querySelector('#path');
    var skills = document.querySelector('#skills');
    var skillsList = skills.value
    skillsList = skillsList.replace(/\n\r?/g, '|');
    const dataToSend = JSON.stringify({"path": path.value, "skills": skillsList});
    console.log(dataToSend);
    let dataReceived = ""; 
    fetch("http://localhost:3000/getSkills", {
        credentials: "same-origin",
        mode: "cors",
        method: "post",
        headers: { "Content-Type": "application/json" },
        body: dataToSend
    }).then(resp => {
        if (resp.status === 200) {
            return resp.json();
        } else {
            console.log("Status: " + resp.status)
            return Promise.reject("server")
        }
    }).then(dataJson => {
        dataReceived = JSON.parse(dataJson)
        console.log(`Received: ${dataReceived}`)
    }).catch(err => {
        if (err === "server") return
        console.log(err)
    }) 
}

为什么我得到 201,而不是按预期返回的 JSON 对象,并且如迅雷客户端所示?

标签: javascript

解决方案


您的“迅雷客户端”显示 201 响应代码是您后端的成功(根据 HTTP 标准,2xx 代码是成功的响应)

201图片

您明确指出,如果不是 200,则表示失败。在您的代码中更改它以接受所有 2xx。ok(window.fetch 返回一个 Response 实例,如果响应代码是 2xx MDN,它将 readonly 属性设置为 true )

.then(resp => {
  if (resp.ok) {
    return resp.json();
  } else {
    console.log("Status: " + resp.status)
    return Promise.reject("server")
  }
})

201 表示已创建,

请求成功,结果创建了一个新资源。这通常是在 POST 请求或某些 PUT 请求之后发送的响应。MDN


推荐阅读