快速路由挂起异步等待



我正在将我的应用程序转换为使用async/await,而不是在后端发出的查询请求的回调。到目前为止进展顺利,但我遇到了一些障碍。我的页面挂在获取路由上,而不是呈现 ejs 页面。来自服务器的控制台还显示,

(节点:7036(
未处理的承诺拒绝警告:未处理的承诺拒绝(拒绝 ID:1(:引用错误:未定义 qryFindLocalID (节点:7036( .
[DEP0018]弃用警告:不推荐使用未处理的承诺拒绝 泰德。将来,未处理的承诺拒绝将终止 Nod e.js具有非零退出代码的进程。

任何帮助将不胜感激。到目前为止的代码是,

router.get("/secure", async (req, res) => {
  let user = req.session.passport.user;
  try {
    if (user.chkUserStatus) {
      if (user.lWaterLabID == 0 || user.lWaterlabID == -9999) {
        // in both cases sLabID is set to 0
        // assign the correct value for sLabName
        user.sLabName = user.lWaterLabID == 0 ? "Site Admin" : "Uber Admin";
      } else {
        let labName = await request.query(
          "Some Query"
        );
        user.sLabName = labName[0].sLabName;
      }
    } else {
      // Houston we've got a problem ...
      // user.chkUserStatus is not truthy
      req.flash("loginMessage", "User Status is invalid.");
      res.redirect("/");
    }
    const qryFindLocalID = await request.query(
      `Some Query`
    );
    if (user.lWaterLabID == 0) {
      const listRecentReports = await request.query(Some Query);
    }  else {
      const listRecentReports = await request.query(Some Query);
    }
  } catch (err) {
    // ... error checks
  }
  res.render("secure/index", {
    qryFindLocalID: qryFindLocalID,
    user: user,
    listRecentReports: listRecentReports
  }); 
});

错误消息谈到了一个未处理的承诺,但这只是包装实际的错误,即:ReferenceError: qryFindLocalID is not defined .

那么你在哪里使用qryFindLocalID?啊,就在res.render通话的底部。

res.render("secure/index", {
  qryFindLocalID: qryFindLocalID,
  user: user,
  listRecentReports: listRecentReports
}); 

现在为什么这里没有定义qryFindLocalID?您在上面的 try-catch 块中定义了它。但是你的问题来了——你用了const,所以qryFindLocalID只存在于 try-catch 中。除此之外,它不存在。

您可以通过在 try-catch 中使用 var 来解决此问题(var的作用域为函数(,或者使用 try-catch 上方的 let DEFINED qryFindLocalID

最新更新