使用 node.js 未处理的承诺拒绝
Unhandled promise rejection using node.js
我在下面有这段代码,它给我一个错误,说我有未处理的承诺拒绝。我是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 块中。
例如……
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
我在下面有这段代码,它给我一个错误,说我有未处理的承诺拒绝。我是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 块中。
例如……
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