微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 nodejs 中使用事务时,如何将 {session} 放入路由内部调用的函数/方法中?

如何解决在 nodejs 中使用事务时,如何将 {session} 放入路由内部调用的函数/方法中?

下面是我使用 async/awaitmongoose Transactions代码,这样每当 try/catch 捕获错误时,整个任务都会滚动 回来。在这条路线中,我调用一个名为 sendMails2Client(data.email,eletopic,'Requirement Submitted','In Progress');

方法

我在同一个 .js 文件中定义的。

所以我想知道如何将 {session} 包含到这个方法中?

const { startSession } = require('mongoose');

    router.route('/update-sources').get(async (req,res) => {

  const session = await startSession();
  if(req.query.selectedValue == 'In Progress')
  {
    try {
      session.startTransaction();

    var eletopic,eleStatus;
  let data = await User.findOne({tag:"Client","Addtasks.commonID":req.query.commonIDs},{session})

          if(data.alertInProgress == 'checked'){
            data.Addtasks.forEach(async (element) => {
              if(element.commonID == req.query.commonIDs)
              {
                eletopic = element.topic;
                eleStatus = element.status
              }
            });
            if(eleStatus == "Requirement Submitted")
            {
              await sendMails2Client(data.email,'In Progress'); 
              console.log("data.status while sending mail to Client for Rev. Req.");
            }
            else if(eleStatus == 'Revision required')
            {
            await sendMails2Client(data.email,'Revision required','In Progress');
              console.log("data.status while sending mail to Client for Rev. Req.");
            }
          }
        else {
            console.log("nothing happened!!!");
          }

   let success = await User.updateMany({"Addtasks.commonID":req.query.commonIDs},{$set: {"Addtasks.$.width" :'250px',"Addtasks.$.height" :'32px',"Addtasks.$.background" :'linear-gradient(45deg,#091B6A,#0029FF)',"Addtasks.$.border_radius" :'10px / 5px',"Addtasks.$.status" :req.query.selectedValue}},{session});
           if (success) {
             console.log("In Progress color set!");
             let dataWriter = await User.findOne({tag:"Writer",{session})
                     dataWriter.Addtasks.forEach(async (element) => {
                       if(element.commonID == req.query.commonIDs)
                       {
                        await sendMails2User(dataWriter.email,element.topic,'In Progress');
                         let dataAdmin = await User.findOne({tag:"Admin",{session})
                         await sendMails2User(dataAdmin.email,'In Progress');
                         return res.end('{"success" : "Updated Successfully","status" : 200}');
                         }
                     })
           }
     } catch (error) {
       console.log(error)
   }
       }
})

附言我还需要在 forEach 循环中包含 {session} 吗?如果是,那我也怎么做?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。