使用module.exports封装MongoDB updateOne查询返回undefined问题求助
问题
我首次使用module.exports创建了一个用于在MongoDB中记录商品购买信息的模块,需要返回updateOne()查询的结果,以便在main.js中获取modifiedCount信息,但目前调用后返回undefined。我知道可以用回调函数或Promise(更推荐Promise),想针对我的代码实现正确的写法。
原模块代码(recordPurchase.js)
const recordPurchase = (userid, item, price) => { db.collection("users").updateOne({ userid: userid }, { $push: { purchases: { item: item, price: price } } }) .then((result) => { if (result.modifiedCount > 0) { console.log("Success"); return result; //return the updateone information } }) .catch((err) => { console.log("Error recording purchase: " + err) }) } module.exports = recordPurchase;
原调用代码(main.js)
if (msg.content === "test") { const userid = "12345"; const item = "Some item name"; const price = 10; const result = recordPurchase(userid, item, price) console.log(result); //returns updateone/result information }
解决方案
问题核心是你的recordPurchase函数没有返回Promise对象,所以调用时拿到的是undefined。MongoDB的updateOne本身就返回Promise,只需让函数把整个Promise链返回出去,同时完善错误处理即可:
修改后的recordPurchase.js
const recordPurchase = (userid, item, price) => { // 返回整个Promise链,让调用方可以后续处理 return db.collection("users").updateOne( { userid: userid }, { $push: { purchases: { item: item, price: price } } } ) .then((result) => { if (result.modifiedCount > 0) { console.log("Success"); } // 无论是否修改成功,都返回完整结果,交给调用方判断 return result; }) .catch((err) => { console.error("Error recording purchase:", err); // 抛出错误,让调用方可以捕获处理 throw err; }); } module.exports = recordPurchase;
修改后的main.js(两种调用方式)
方式1:使用async/await(更直观易读)
// 注意:这段代码如果放在函数内,需要给外层函数加上async关键字 if (msg.content === "test") { const userid = "12345"; const item = "Some item name"; const price = 10; try { const result = await recordPurchase(userid, item, price); console.log("更新结果:", result); // 直接获取modifiedCount console.log("修改的文档数量:", result.modifiedCount); } catch (err) { console.error("处理购买记录失败:", err); } }
方式2:使用.then()/.catch()链式调用
if (msg.content === "test") { const userid = "12345"; const item = "Some item name"; const price = 10; recordPurchase(userid, item, price) .then((result) => { console.log("更新结果:", result); console.log("修改的文档数量:", result.modifiedCount); }) .catch((err) => { console.error("处理购买记录失败:", err); }); }
内容的提问来源于stack exchange,提问作者user874737
相关产品推荐
相关产品推荐

