Fetch получает сериализованный объект с сервера.Почему он уже десериализован при проверке внутри выборки? - PullRequest
0 голосов
/ 27 ноября 2018

Используя API выборки, сервер node.js отправляет обратно следующий сериализованный объект:

app.get('/getJoe', function(request, response) {

      var myObj = {};
      myObj.firstname = "Joe";
      myObj.age = 23;
      var myObjSerialized = JSON.stringify(myObj);
      response.send(myObjSerialized); //sends {"firstname":"Joe","age":23}

});

API выборки обрабатывает ответ следующим образом:

function getJoe(){

    fetch('/getJoe')
    .then((response) => {
      return response.json();
    })
    .then((person) => {
      console.log(typeof(person)); //outputs object
      console.log(person) //outputs {firstname: "Joe", age: 23}
    })
}

Почему нет 't рендеринга рендеринга зашитого объекта так же, как это делается на сервере?

Другими словами, если сервер отвечает на запрос выборки со следующим строковым объектом:

{"firstname": "Joe", "age": 23}

Разве сборщик все еще не должен видеть его в виде строки?Почему вместо этого он выглядит так:

{firstname: "Joe", age: 23}

Более того, вместо того, чтобы преобразовывать человека обратно в объект (используя JSON.parse (person)) человек уже может рассматриваться как объект.

1 Ответ

0 голосов
/ 27 ноября 2018

Строка

return response.json();

принимает поток Response и возвращает Promise, который разрешается в десериализованную версию ответа.Если вам нужен только простой текст, вы должны использовать вместо этого метод .text():

return response.text();

Эта автоматическая десериализация характерна для fetch и fetch .json() метода.Если бы вы использовали XMLHttpRequest, у вас был бы только текстовый ответ, который вам пришлось бы преобразовать обратно в объект, используя JSON.parse.

...