Браузерам нужен ответ HTTP, но сервер не разрешает множественные ответы - PullRequest
0 голосов
/ 17 июня 2019

Это мой обработчик, который отправляет запрос 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:

img1

Но когда я возвращаю ответ (данные), как показано выше (http-запрос - 200)

img2

Тогда мой сервер падает:

    Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent 

Итак ... мне нужно отправить этот ответ, но его нельзя отправить дважды ... Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...