Node.js+Mongoose异步模块导入后返回undefined问题求助
问题分析与解决方案
核心问题是导出的findUser函数没有返回值,导致外部调用时得到undefined,进而无法调用.then()方法。
问题根源
你定义的原findUser是async函数(本质返回Promise),但导出时的包装函数只调用了findUser(associatedUser),却没有返回这个调用的结果:
findUser: function (associatedUser) { findUser(associatedUser); // 这里没有return,函数默认返回undefined },
修复步骤
1. 修正导出逻辑
直接导出原async函数即可,无需额外包装:
module.exports = { findUserAndUpdateValues: async function (associatedUser, givenObjectValue, newValue) { return findUserAndUpdateValues(associatedUser, givenObjectValue, newValue); }, createUser: async function (associatedUser, currentContext, name, email, subject, budget, phone, message, mailinglist) { return createUser(associatedUser, currentContext, name, email, subject, budget, phone, message, mailinglist); }, // 直接引用原async函数,自动继承Promise返回值 findUser: findUser };
如果需要保留包装函数,必须返回原函数的调用结果(因为原函数是async,返回的是Promise):
findUser: async function (associatedUser) { return findUser(associatedUser); // 关键:返回Promise }
2. 优化原findUser函数(可选但推荐)
你当前用User.find()返回数组后再手动遍历查找,完全可以用User.findOne()直接获取单个文档,避免冗余操作:
async function findUser(associatedUser) { try { // findOne直接匹配单个文档,无需后续遍历 const foundUserObject = await User.findOne({ associatedUser }); return foundUserObject; } catch (err) { console.error(err); process.exit(1); } }
3. 正确调用导出的函数
因为findUser返回Promise,外部调用有两种方式:
- 在
async函数内使用await:const MongoDBModule = require('./index'); async function getTargetUser() { const user = await MongoDBModule.findUser(associatedUserPrompt); console.log(user); // 输出目标用户对象 } getTargetUser(); - 使用
.then()链式调用:const MongoDBModule = require('./index'); MongoDBModule.findUser(associatedUserPrompt) .then(user => console.log(user)) .catch(err => console.error(err));
注意事项
其他导出的函数(findUserAndUpdateValues、createUser)也存在相同的无返回值问题,需要按照同样的方式修复——确保返回原函数的调用结果(如果原函数是异步的,返回Promise)。
内容的提问来源于stack exchange,提问作者Commoq
相关产品推荐
相关产品推荐

