[NodeJs]拿不到mysql查询返回的数据?你可能还没试过这招

[NodeJs]拿不到mysql查询返回的数据?你可能还没试过这招

  • 解决 nodejs分离mysql模块后,能在模块内console.log出数据,主模块却拿不到的问题

导读

  • 缘由
  • 解决方案

缘由

  1. 曾经在刚刚初学nodejs的时候,就想要把nodejsmysql链接起来;于是便在网络上简单学习了nodejs链接mysql的教程,但当时所有代码都挤在一个 app.js 里面,但当我去将mysql的模块专门从app.js中抽离的时候,问题发生了。(今天拿一个简单的小项目来举例)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 这样的写法,虽然能够console.log出数据,但是app.js是接收不到的(通过console.log逐步查找出来的原因),因此我们去访问这个接口,也拿不到任何数据
  • 虽然知道这大几率是异步的问题,但处理起来还是令人头疼
  • 因为这样的问题,大多都是执行函数,但result还没有被查询到并赋值,函数就已经给我返回了result

在这里插入图片描述

  • 这里的执行顺序是,访问接口,触发getdata()函数,然后将返回值发送
    在这里插入图片描述
  • 而这里的执行顺序就比较有意思了,先是进入函数,然后进入db.query的函数体,此时result还没有被查询到,log也被略过,直接先执行了return,然后就返回了一个未被定义的空值

在这里插入图片描述
可以看到,查询结果的log执行明显在后面

  • 如果你细心,去挨个调试输出也能发现这个奇妙的问题。
  • 而且,data 居然是先输出了 undefined,而查询结果却在后面;显然,这是执行顺序的锅。
  1. 按照正常的逻辑,这些数据需要我每访问一次就从数据中查询一次,如果直接将查询过程变为一次性的(每次启动服务的时候才会重新去sql查询),那么就可以解决问题,但这怎么看,也不像解决了问题,很多数据是需要立即获取的,比如说很多实时更新的信息,这时候你想要通过重启服务才能查看最新信息,很显然是不现实的。

  2. 一时间,陷入僵局。。。

解决方案

  1. 因为这个问题,我翻阅了其他人上百篇的博客,发现此类的极少,因为他们做演示的时候大多都是在一个 app.js文件下执行的,根本没有分离的过程,也没有这样的问题。

  2. 但功夫不负有心人,通过国外的几篇问题贴,我强忍着翻译后生硬的话语,去看出了其中的玄机。

  3. 直接获取不到的结果,可以通过回调函数来返回。

  4. 改造。。。。

  5. 改造后的代码如下

在这里插入图片描述
在这里插入图片描述
6. 在写法上的确和之前有了变动,这次我们再次打开浏览器,数据跃然屏上

在这里插入图片描述

后话

创作不易 欢迎点赞收藏

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值