流浪的菜袅 2023-05-26 23:30 采纳率: 79.5%
浏览 10
已结题

nodejs中的变量作用域

大葛们,为什么我这个userid怎么都读取不到,菜是原罪a
求大葛们教教我

function postUserData(){
    return new Promise((resolve, reject) => {
        mysql.getConnection(function(err,connection) {
            if(err) {
                console.log(err);
                reject(err)
                return res.status(500)
            }
            connection.query('insert into user values(0,?,?,?)',Object.values(users),function(error,results,fields){
                if(error) {
                    console.log(error);
                    return res.status(500)
                }
                console.log('-----------users----------',users);
                console.log('---------results-------------',results.insertId);
                connection.release()
                resolve(results.insertId)
            })
        })  
    })
}
router.post('/wx',async(req,res) => {
    try {
        let body = req.body
        console.log('---body----',body);
        USER_PRIVACY_DATA.js_code = body.code
        let users = {
            nickName:body.nickName,
            avatarUrl:body.avatarUrl,
            gender:body.gender
        }
        let userid;
        const wxds = await axios.get(`https://api.weixin.qq.com/sns/jscode2session`,{params:USER_PRIVACY_DATA})
        let length = 0
        const ormUser = orm.model('user')
        ormUser.sql(`select * from user where avatarUrl="${users.avatarUrl}"`,async(err,data) => {
            if(err) {
                console.log('select---------------err',err);
                return res.status(500)
            }
            userid = data.id
            length = data.length
            if(length < 1) {
                userid = await postUserData()
                console.log('--------------00--userid--00-----',userid);

            }
            console.log('--------------11--userid--22-----',userid);
            const token = jwt.sign(wxds.data, SIGNATERE, {expiresIn: 10 * 1})
            res.send({code:200,msg:'做的很棒孩子',data:{userid,token}})
        })
    } catch (err) {
        console.log(err);
        res.status(500).send(err)
    }
})
  • 写回答

2条回答 默认 最新

  • 北海屿鹿 2023-05-27 08:49
    关注

    在您的代码中,userid是在router.post方法中定义的,并且在该方法的回调函数中被赋值。然而,在postUserData方法中,userid是无法访问到的,因为它是在另一个函数作用域中定义的。如果您想在postUserData方法中访问userid,可以将它作为参数传递进去

    function postUserData(userid) {
      // ...
    }
    
    router.post('/wx', async (req, res) => {
      try {
        // ...
        let userid;
        // ...
        if (length < 1) {
          userid = await postUserData(userid); // 将userid作为参数传递给postUserData方法
          console.log('--------------00--userid--00-----', userid);
        }
        // ...
      } catch (err) {
        console.log(err);
        res.status(500).send(err)
      }
    });
    
    
    

    在postUserData方法中,您需要修改方法的定义和调用方式

    function postUserData(userid) {
      return new Promise((resolve, reject) => {
        mysql.getConnection(function(err, connection) {
          if (err) {
            console.log(err);
            reject(err);
            return res.status(500);
          }
          connection.query('insert into user values(0,?,?,?)', Object.values(users), function(error, results, fields) {
            if (error) {
              console.log(error);
              return res.status(500);
            }
            console.log('-----------users----------', users);
            console.log('---------results-------------', results.insertId);
            connection.release();
            resolve(results.insertId);
          });
        });
      });
    }
    
    router.post('/wx', async (req, res) => {
      try {
        // ...
        let userid;
        // ...
        if (length < 1) {
          userid = await postUserData(userid); // 将userid作为参数传递给postUserData方法
          console.log('--------------00--userid--00-----', userid);
        }
        // ...
      } catch (err) {
        console.log(err);
        res.status(500).send(err)
      }
    });
     
    

    这样就可以在postUserData方法中访问到userid了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月4日
  • 已采纳回答 5月27日
  • 创建了问题 5月26日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀