Статус 201 в выборке

#javascript

Вопрос:

У меня есть приведенный ниже код JS, который возвращает статус 201, введите описание изображения здесь

Я работаю с локальным сервером, который работает правильно, как только я проверил его на клиенте thunder, как показано на рисунке:

введите описание изображения здесь

Мой код таков:

 async function send(params) {
    var path = document.querySelector('#path');
    var skills = document.querySelector('#skills');
    var skillsList = skills.value
    skillsList = skillsList.replace(/nr?/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, как ожидалось, и как показано на клиенте thunder?

Комментарии:

1. Какой у тебя вопрос ?

2. В чем ваш вопрос/проблема?

3. @jonrsharpe Почему я получаю 201, а не возвращенный объект JSON, как ожидалось, и как показано на клиенте thunder?

4. @Furman Почему я получаю 201, а не возвращенный объект JSON, как ожидалось, и как показано на клиенте thunder?

5. Почему ваш сервер возвращает 201, когда вы, очевидно, этого не хотите?

Ответ №1:

Ваш «клиент thunder» показывает, что код ответа 201 успешно получен с вашего бэкенда (а коды 2xx являются успешными ответами в соответствии со стандартом HTTP).

201 изображение

Вы прямо заявляете, что если это не 200, то это провал. Измените это в своем коде, чтобы принять все 2xx. (окно.fetch возвращает экземпляр ответа, который устанавливает атрибут ok только для чтения в значение true, если код ответа равен 2xx MDN)

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

201 означает Созданный,

Запрос удался, и в результате был создан новый ресурс. Обычно это ответ, отправляемый после запросов POST или некоторых запросов PUT. MDN

Комментарии:

1. Большое спасибо, я только что исправил это на своем сервере, заменил w.WriteHeader(http.StatusCreated) на w.WriteHeader(http.StatusOK) благодарное ваше объяснение, которое помогло мне просмотреть код моего сервера.