Mam problem z trasą w moim zapleczu, gdzie res.status().send() wyśle ​​klientowi tylko kod stanu, ale nie wyśle ​​klientowi obiektu znajdującego się wewnątrz send().

Oto mój kod (zredagowano cały kod, ale problem ze względu na zwięzłość):

exports.user_signup = (req, res) => {
  const { body } = req;
  const { companyName, password, email } = body;

  User.find({ email: email }, (err, previousUsers) => {
    if (err) {
      return res.status(400).send({
        message: "There was an issue signing up."
      });
    } else if (previousUsers.length > 0) {
      return res.status(403).send({
        message: "Records show this email is linked to another account."
      });
    }
}

Kiedy tworzę fetch request od klienta, odpowiedź zwraca tylko status code z serwera, ale nigdzie w odpowiedzi nie ma obiektu w metodzie send() na serwerze. Po prostu plując, rzuciłem res.status(200).json(object), aby wysłać obiekt jako json bezskutecznie.

Oto moje żądanie pobrania od klienta:

  fetch("http://localhost:3000/users/accounts/", {
    method: "post",
    headers: {
      Accept: "application/json",
      "Content-Type": "application/json"
    },
    body: JSON.stringify(userData)
  }).then(response => console.log(response));
}

Aby pokazać, jaką odpowiedź otrzymuję, celowo wysłałem dane formularza od klienta na trasę, która wyrzuciłaby błąd 403, i to jest odpowiedź, którą otrzymuję w konsoli przeglądarki:

Response {type: "basic", url: "http://localhost:3000/users/accounts/", redirected: false, status: 403, ok: false, …}

Więc jestem w stanie pomyślnie wysłać status z powrotem z trasy do klienta, jednak nie mogę za życia zrozumieć, dlaczego send() nie wysyła obiektu wraz z nim.

2
maison.m 30 listopad 2018, 08:40

1 odpowiedź

Najlepsza odpowiedź

body odpowiedzi, która pochodzi z fetch() to ReadableStream. Musisz go przetworzyć, aby przekształcić go w coś użytecznego. Normalnie wywołałbyś response.json(), aby przeanalizować go jako obiekt JSON:

fetch("http://localhost:3000/users/accounts/", {
    method: "post",
    headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
    },
    body: JSON.stringify(userData)
})
    .then(response => response.json())
    .then(response => console.log(response));
}
5
Jim B. 30 listopad 2018, 08:53
Bum, to było dokładnie to. Dzięki za szybką i wnikliwą odpowiedź.
 – 
maison.m
30 listopad 2018, 08:58
2
Boom to moja ulubiona reakcja.
 – 
Jim B.
30 listopad 2018, 09:02