Как обойти ошибку «Невозможно установить заголовки после их отправки клиенту» в Express? - PullRequest
0 голосов
/ 17 февраля 2020

Я создаю простое приложение Express, точнее, приложение todo. Он работает нормально, я могу создать задачу, удалить, обновить и т. Д. c. Проблема в том, что когда я создаю уже существующего пользователя, приложение вылетает, выдавая мне эту ошибку:

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

Как вы можете видеть из приведенного ниже кода, когда функция create обнаруживает подобное, я сделал это так что он возвращает сообщение о том, что задача уже существует. Но вместо сообщения я получаю сообщение об ошибке. Это функция создания:

exports.createTask = function (req, res) {
    const { text, createdDateAndTime, creator } = req.body;

    Task.findOne({ text })
    .exec((err, task) => {
        if (task) {
            return res.status(400).json({
                message: 'Task exists already'
            });
        }
    });

let newTask = new Task({ text, createdDateAndTime, creator });

newTask.save((err, newTask) => {
    if (err) {
        return res.status(400).json({
            message: `Task wasn't saved beacause: ${err}`
        });
    }

    res.json({
        message: `Task ${newTask.text} created successfuly`,
    })
});

};

Я предполагаю, что после нахождения подобного todo он отправляет ответ обратно в браузер, а затем продолжает выполнять остальные функции, следовательно, ошибка. Так что, если это так, как я могу сделать так, чтобы я не получил эту ошибку, или как я могу остановить функцию, когда она обнаружит аналогичного пользователя и вернет соответствующее сообщение?

...