javascript - 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()
解决方案
你的方法有很多问题。简而言之,您不能这样做,因为该函数不返回任何内容。在 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
});
或导出函数而不调用它,导入此函数并在异步函数中等待它的结果,因为您将在创建新用户时执行异步操作。
如果您有兴趣,请在此处了解更多详细信息。
推荐阅读
- opengl - GL_SYNC_FLUSH_COMMANDS_BIT 和 glFlush 不一样?
- javascript - 对数组应用条件
- azure - 如何知道 azure 角色分配已经存在
- javascript - 地图功能不起作用我做错了什么?
- ignite - 获取 Ignite 客户端-服务器连接信息
- unit-testing - 如何在构建管道的单元测试失败时从 Azure DevOps 向特定开发人员发送详细的电子邮件?
- terraform - Terraform vm_name_prefix 自动增量修改
- sql - Oracle sql查询返回第一次来的客户
- javascript - 登录后Firebase慢速重定向?
- angular - 未随 HTTP 请求发送的标头