簡體   English   中英

未處理的 promise 拒絕使用 node.js

[英]Unhandled promise rejection using node.js

我在下面有這段代碼,它給了我一個錯誤,說我沒有處理 promise 拒絕。 我是 node.js 和快遞的新手,我不知道我做錯了什么。

const User = require('../model/user');

const linkValidation = async (req, res, next)  => {
    var refer = req.params.refer;
    if (refer) {
        await User.findById(refer) 
        .then(user, async function() {
            if (user) {
                user.saldo = user.saldo + 10
                user.invites.push({
                nome: nome,
                valor_recebido: 10
                });
                await user.save().catch(err =>{
                    return res.status(500).json(err)
                })
            }else{
                return res.status(404).json({message: "Usuário que criou esse link não existe"})
            }
        }).catch(err =>{
        return res.status(500).json(err)
        })

    }else{

        return res.status(404).json({message: "Usuário que criou esse link não existe"})
    }
    next()
}

module.exports = linkValidation

我使用的路由器是:

router.post('/cadastro/:refer', UserMiddleware, LinkMiddleware, UserController.create);

誰能幫我?

我的主要建議是在這里只使用 async/await。 我相信您將 async/await 與 .catch() 和 .then() 混合的方式是導致您的錯誤的原因。

使用 async/await 時,我認為最簡單的方法是使用如下所示的 try/catch 塊(而不是 .catch),並將任何拋出的錯誤傳遞給您的錯誤處理程序,並在 catch 塊中使用 next。

例如...

const User = require('../model/user');

const linkValidation = async (req, res, next)  => {
    try {
        const refer = req.params.refer;
        const user = await User.findById(refer) 

        if (user) {
            user.saldo = user.saldo + 10
            user.invites.push({
                nome: nome,
                valor_recebido: 10
            });
            await user.save()
        }

        res.send('success')

    } catch(err) {
        next(err)
    }
}

module.exports = linkValidation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM