首页 > 解决方案 > NodeJS 模块导出问题

问题描述

我有一个返回字符串的函数,但无论我尝试什么导出策略,我似乎都无法调用这个函数并返回一个字符串。一切都返回未定义。任何指针或帮助将不胜感激

在下面的示例中,我使用以下方法调用该函数::

const generateUsername = require("../middlewares/generateUsername.js");

newUser.username = 生成用户名;

function GenerateUnique() {
    let proposedUserName = generateUserName();
    //Works and returns a string "UNIQUEUSERNAME1223"   
 User.findOne({username: proposedUserName}).then((foundUserName) => {

        if (!foundUserName) {
            return proposedUserName;
        } else {
            GenerateUnique()
        }
    })
}

function generateUnique() {
    return new GenerateUnique();
}


module.exports = generateUnique()

标签: javascriptnode.js

解决方案


你的方法有很多问题。简而言之,您不能这样做,因为该函数不返回任何内容。在 then 中使用 return 只是对 Promise 调用者的返回值。父函数不会返回这个值。

但是,您可以将代码重构为如下所示:

async function generateUnique() {
    let proposedUserName = generateUserName();
    let foundUserName = await User.findOne({username: proposedUserName});
    if (!foundUserName) return proposedUserName;
    return await generateUnique();
}


module.exports = generateUnique();

当您将此模块导入其他文件时:

const unique = require('yourmodulename').then(proposedUserName => {
   //you can access your proposed username from here
});

或导出函数而不调用它,导入此函数并在异步函数中等待它的结果,因为您将在创建新用户时执行异步操作。
如果您有兴趣,请在此处了解更多详细信息。


推荐阅读