Ошибка [ERR_HTTP_HEADERS_SENT]: Не удается установить заголовки после их отправки клиенту-ошибка

#javascript #node.js #mongodb #express

Вопрос:

Я пытаюсь перенаправить страницу на другую страницу . в первый раз, когда я отправляю запрос на публикацию, он работает нормально, но со второго запроса на публикацию он выдает мне эту ошибку .

Ошибка [ERR_HTTP_HEADERS_SENT]: Не удается установить заголовки после их отправки клиенту

Каждый второй раз, когда я отправляю запрос на публикацию, он выдает мне ошибку.

Это и есть код

 const find_doctor_and_update =(a , p) => {
console.log(a)
patients.findOneAndUpdate({name : a} , { $push :{ patients : p } } , {new : true})
.then(data => {
        return data;
})
.catch(err => {
    console.log(err);
}) };


router.post('/upload', authorize,  upload.single('avatar'), (req, res) => {
    console.log(req.body)
    var pname = req.session.userid
    patient_detail.image_name = `${unique_id}-${req.file.originalname}`;
    patient_detail.pid = req.body.pid;
    patient_detail.name = req.body.name;
    patient_detail.age = req.body.age;
    patient_detail.bg = req.body.bg;
    prediction_file.stdin.write(`${unique_id}-${req.file.originalname}n`);
    prediction_file.stdout.on('data', (output) => {
        if(output == 0){
            patient_detail.class = output;
            console.log('the output is here')

            find_doctor_and_update(pname, (patient_detail))
            .then(data => {
                console.log(data);
                return res.redirect(`/viewpatient/${patient_detail.pid}`);
                
            })
            .catch(err => {
                 //this is the line where i get the error second time when I do post request
                console.log(err);
            })
        }
        console.log(`stdout: ${output}`);
    }) 
})
module.exports = router;
 

Комментарии:

1. Не могли бы вы объяснить мне этот поток?.. Я вижу, что вы не возвращаете никаких обещаний, но все равно используете блок «затем» для «find_doctor_and_update». Как это не дает вам никаких ошибок?

2. да, когда я удалил блок «тогда», он показывает еще одну ошибку, из-за которой обещание не обрабатывается

3. Поток -> при отправке запроса post он сохраняет тело в файле patient_detail. затем он переходит в файл прогнозирования дочернего процесса, а затем, когда возвращает результат, переходит к функции «find_doctor_and_update» для обновления базы данных, а затем возвращает обновленные данные. если в функции нет ошибки, она перенаправляется на другую страницу

4. Вот почему я не понимаю. вы не возвращаете никаких обещаний в «find_doctor_and_update», но блок «тогда» работает для вас. Кроме того, можете ли вы видеть сообщение консоли из «console.log(a)» — первая строка в «find_doctor_and_update» каждый раз, когда вы выполняете запрос на отправку от почтальона??

5. да, я могу это видеть

Ответ №1:

Я понял, что совершил ошибку . Я попытался поместить функцию вывода «prediction_file.stdout» в метод post . Из-за чего он возвращался назад, и даже если я пытался сделать возврат, он не возвращался.