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.
1 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));
}