我正在制作一個數字貨幣應用程式(用于封閉社區),在進行交易后,我想更新 mongodb 中接收方的余額。
const create = (req, res) => {
let transaction = new Transaction();
transaction.sender = req.body.sender;
transaction.receiver = req.body.receiver;
transaction.amount = req.body.amount;
transaction.save((err, doc) => {
if(!err) {
console.log(transaction.receiver);
User.updateOne({username: transaction.receiver}, {$inc: {balance: 1}});
res.json({
"status": "success",
"data": {
"transaction": doc
}
});
} else {
res.json({
"status": "error",
"message": "Could not make the transaction"
});
}
})
}
當我測驗時:
db.getCollection('users').updateOne({username: "aidenn"}, {$inc: {balance: 1}})
在 RoboT3 中,檔案會更新。為什么它在我的控制器中不起作用?
我在 Postman 中測驗:
{
"sender": "Nicolas",
"receiver": "aidenn",
"amount": 1
}
uj5u.com熱心網友回復:
這應該有效: saveOne 向您回傳一個承諾:
const create = (req, res) => {
let transaction = new Transaction();
transaction.sender = req.body.sender;
transaction.receiver = req.body.receiver;
transaction.amount = req.body.amount;
transaction.save(async (err, doc) => {
if(!err) {
console.log(transaction.receiver);
const updated = await User.updateOne({username: transaction.receiver}, {$inc: {balance: 1}});
//verify the log
console.log({updated})
res.json({
"status": "success",
"data": {
"transaction": doc
}
});
} else {
res.json({
"status": "error",
"message": "Could not make the transaction"
});
}
})
這是一個可讀的代碼,使用存盤庫模式和服務可能會更好:
const create = async (req, res) => {
try {
let transaction = new Transaction();
transaction.sender = req.body.sender;
transaction.receiver = req.body.receiver;
transaction.amount = req.body.amount;
const transactionSaved = await transaction.save();
const updated = await User.updateOne(
{ username: transaction.receiver },
{ $inc: { balance: 1 } },
);
res.json({
status: 'success',
data: {
transaction: transactionSaved,
},
});
} catch (e) {
res.json({
status: 'error',
message: 'Could not make the transaction',
});
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/476004.html
