【问题标题】:Returning boolean from mongoose .exists function从 mongoose .exists 函数返回布尔值
【发布时间】:2020-11-29 02:01:07
【问题描述】:

我正在尝试学习一些 node.js 和 mongoDB。为此,我正在编写一个演示登录系统。

我的主 api 调用了一个函数来检查 mongoDB 是否存在 refreshToken。

const checkRefreshTokenDB = (tokenPayload) => {
  const decoded = jwt.decode(tokenPayload);
  RefreshToken.exists(
    { tokenId: decoded.refresh.tokenId },
    function (err, result) {
      if (err) {
        console.log(err);
      } else {
        console.log('Result: ' + result);
      }
    }
  );
};

我可以在 console.log 中看到 RefreshToken.exists 正在工作。我正在努力使这个函数返回一个简单的真/假给调用者。目前它似乎正在返回一个承诺。

任何帮助将不胜感激 谢谢

【问题讨论】:

  • 你确定 checkRefreshTokenDB 正在返回一个承诺吗?它在任何地方都没有返回语句。
  • 我不完全确定 tbh,但我在我的 api 路由处理程序中 console.log(checkRefreshTokenDB(token) 并且我得到了 [object Promise],正如你所说,给定 checkRefreshTokenDB() 没有有一个回报让我开始困惑

标签: javascript node.js mongodb mongoose


【解决方案1】:

解决问题的一种方法是使用async/await

const checkRefreshTokenDB = async (tokenPayload) => {
  const decoded = jwt.decode(tokenPayload);
  return await RefreshToken.exists({ tokenId: decoded.refresh.tokenId });
};

现在您可以从async 函数调用此函数,如下所示(await 仅在异步函数中有效)

const status = await checkRefreshTokenDB(tokenPayload);
console.log(status)

【讨论】:

    【解决方案2】:

    如果它确实返回了一个承诺,那么使用 async/await:

    const checkRefreshTokenDB = (tokenPayload) => {
      const decoded = jwt.decode(tokenPayload);
      RefreshToken.exists(
        { tokenId: decoded.refresh.tokenId }
      , async function (err, result) { console.log(await result); });
    };
    

    【讨论】:

    • 谢谢,我可以从函数本身得到正确的真/假响应——我的问题是将响应返回给调用者。当我 console.log 来自这个函数的响应时,我得到 [object Promise]
    • 在你之前做的回调中等待它怎么样?修改答案
    • 我正在 console.log-ing 函数,就像 console.log( 'refreshDBCheck = ' + refreshToken.checkRefreshTokenDB(req.cookies.refreshToken) ); 一样,并得到 refreshDBCheck = undefined
    • 你还得到承诺吗?
    猜你喜欢
    • 2013-03-11
    • 2017-06-07
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多