Почему следующая функция застревает, когда я нажимаю на нее из почтальона? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь обновить запись в MongoDB с помощью следующей функции, но иногда она застревает при попадании в конечную точку почтальона, и я не знаю, почему это происходит?Помогите определить проблему здесь

update: (req, res) => {
    let id = req.params.id;
    let image = req.file.path;
    let newPost = {
        title: req.body.title,
        slug: req.body.slug,
        body: req.body.body,
        image: image
    };
    Post.findOne({_id: id}, (err, post) => {
        if(err)
        {
            return res.status(403).json({
                errors: err.errors
            });
        }
        else
        {
            if(!post)
            {
                res.status(404).json({
                    message: "Post not found"
                });                   
            }
            else
            {
                let oldImage = post.image;                
                Post.updateOne({_id: id}, newPost, (err, post) => {
                    if(err)
                    {
                        return res.status(403).json({
                            errors: err.errors
                        });
                    }
                    else
                    {
                        if(oldImage)

                            fs.unlinkSync(oldImage);
                        return res.status(200).json({
                            post
                        });
                    }
                });
            }
        }
    });
},

1 Ответ

0 голосов
/ 11 февраля 2019

В принципе, ваш код выглядит нормально (я только прочитал, но не проверял!).Но могут возникнуть проблемы, когда, например, генерируется исключение синхронно.Это может произойти, например, при вызове fs.unlinkSync (обратите внимание, что я не говорю, что проблема в этой строке, это просто пример).

Если это произойдет, то далеевыполнение этого маршрута остановлено, и вы никогда не получите результат.То же самое может произойти и в других местах, поэтому, возможно, try / catch вокруг всего, что приводит к отправке 500, было бы хорошей идеей.

...