Это мой обработчик, который отправляет запрос PUT на мой сервер:
export function insertRandomQuestionsHandler(roomId, questions) {
return (dispatch) => {
dispatch(questionOverviewHandler(questions));
let result = questions.reduce((r, e) => (r.push(...e), r), []);
const url = . `http://localhost:3000/quizzer/room/${roomId}/selectedQuestions`;
const response = fetch(url, {
method: "PUT",
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
questions: result,
})
});
if (response.error) {
throw new Error(`HTTP PUT request went wrong: got .
"${response.statusText}" for "${url}"`)
}
dispatch(insertRandomQuestions(result))
}
}
На сервере он проходит этот запрос:
quizzer.put('/room/:roomId/selectedQuestions', async function (req, res) {
for (let i = 0; i < req.body.questions.length; i++) {
await Room.findOneAndUpdate({roomId: req.params.roomId}, {
"$push": {
"questions": [{
"_id": req.body.questions[i]._id,
"question": req.body.questions[i].question,
"answer": req.body.questions[i].answer,
"category": req.body.questions[i].category,
"isShown": false,
}]
}
},(err, data) => {
if (err) {
return res.status(500).send(err);
}
return res.status(200).json(data);
});
}
});
По какой-то причине браузер нуждается в ответе, иначе запрос застрянет при ожидании и в конечном итоге вернет ERR_EMPTY_RESPONSE:
Но когда я возвращаю ответ (данные), как показано выше (http-запрос - 200)
Тогда мой сервер падает:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent
Итак ... мне нужно отправить этот ответ, но его нельзя отправить дважды ...
Есть идеи?