[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. 在寫法上的確和之前有了變動,這次我們再次打開瀏覽器,數據躍然屏上

在這裏插入圖片描述

後話

創作不易 歡迎點贊收藏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章