#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 . Из-за чего он возвращался назад, и даже если я пытался сделать возврат, он не возвращался.