前言
博主自己在22年夏天根據(jù)課程要求做了一個小程序連接阿里云服務(wù)器的案例,在最近又碰到了相應(yīng)的需求。
原參考文章:微信小程序 Node連接本地MYSQL_微信小程序nodejs連接數(shù)據(jù)庫_JJJenny0607的博客-CSDN博客 ,還請多多支持原作者!
第二次嘗試的時候已經(jīng)熟練許多了,但是還是遇到了很多挺煩人的問題,也浪費了很多時間排查 bug。因此博主打算趁著剛做過記憶還深刻的時候,把全過程、博主自己的理解和遇到的一些問題的解決方法整理出來。當然我也不可能能解決所有問題,遇到的部分問題也只是針對我自己的情況可以解決。因此如果 solutions 不起效或遇到其他問題,可以在評論區(qū)留言,我會與大家溝通(不保證能否解決~)。
原理
nodejs 作為中介服務(wù)器,可以讓小程序連接 mysql 數(shù)據(jù)庫。
步驟
如果不出錯誤的話, 基本流程就是跟著上面的文章來的。
-
下載 node。可以在 cmd 中輸入
node -v
查看有無成功下載。 -
新建一個數(shù)據(jù)庫,這一部分很簡單,有 mysql 相關(guān)基礎(chǔ)的讀者應(yīng)該沒問題,也可以看博主的 mysql 專欄學(xué)習(xí)。
-
新建一個小程序,在結(jié)構(gòu)中新建 server 文件夾用于存儲 node 本地服務(wù)器相關(guān)代碼。
-
右鍵 server 文件夾,點擊“在內(nèi)建終端中打開”,安裝一些所需的包。
npm init -y
npm i mysql --save-dev
npm install body-parser --save-dev
npm install express --save-dev
- 在文件夾下新建 server.js 文件,編寫代碼。
const express=require('express')
const bodyParser =require('body-parser')
const app=express()
const mysql = require('mysql')
const IPAddress='[你的數(shù)據(jù)庫地址]'//因為這里是要鏈接遠程數(shù)據(jù)庫,ip 地址是 mysql 的地址?。”镜鼐褪?127.0.0.1,服務(wù)器上就自己找找看
const UserName='[mysql 用戶名]'
const PWD='[mysql 密碼]'
const DBName='[要操作的數(shù)據(jù)庫名]'
app.use(express.json())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
//這上面一段固定的,[] 的部分需要根據(jù)自己數(shù)據(jù)庫的信息修改
//處理get請求。這里是一個 get 請求的方法演示,作用是查詢 table1 表中的所有數(shù)據(jù)并返回。
app.get('/getUser',(req,res)=>{ //這里的是 get 方法 getUser,對應(yīng)了剛才的頁面發(fā)來的請求。就會執(zhí)行這個方法。
//參數(shù)傳入是在 req.body 對象里面。比如上面的語句是獲取傳入的 openid 變量,并且我們新定義一個叫 openid 的變量存儲傳入的 openid 變量
var connection=mysql.createConnection({
host:IPAddress,
port: 3306, //端口號,mysql 固定3306
user:UserName,
password:PWD,
database:DBName
})//配置連接的屬性
connection.connect();//嘗試連接
connection.query("select * from table1",function(error,results,fields){//執(zhí)行查找語句
if(error) console.log(error);//執(zhí)行失敗的話
res.json(results)
console.log(results)
})
connection.end();//斷開連接
})
app.listen(3000,()=>{//這是一個監(jiān)聽端口,會輸出監(jiān)聽到的信息。上面的 console.log 就會在這里輸出
console.log('server running at http://'+IPAddress+':3000')
})
我們的 nodejs 是部署在本地的,就在 server 文件夾里。node_modules 是下載的 nodejs 包,server.js 是我們的操作 nodejs 的代碼。
我們在需要調(diào)用數(shù)據(jù)庫的頁面里先調(diào)用本地服務(wù)器,比如在 mysqlTest.js 中,onLoad 里:
onLoad() {
//我們寫一個調(diào)用數(shù)據(jù)庫函數(shù),使得本頁面加載時調(diào)用此函數(shù),查找 youqi.data 里的所有條目。
wx.request({
method: 'GET',//這里要和 server.js 定義的 post or get 一致!??!
url: 'http://[本地 IPV4 地址]:3000/getUser',//這里的 ip 地址不是數(shù)據(jù)庫的地址,而是你的電腦本地的地址,因為這一步的操作是要找到本地 nodejs 服務(wù)器。getUser 要和 server.js 中定義的方法名一致。
data: {
//這里面是傳入?yún)?shù)。比如我們要 select * from data where openid= 給定的 openid,就可以從這里傳入
},
success: function (res) {//成功獲取到值,返回一個 res 對象。如果不知道 res 對象里面包含什么,可以先輸出 res 對象看一下其中都包含什么
console.log(res);
},
fail: function () {//沒有獲取到值,說明這中間出問題了。
console.log("獲取失敗");
}
})
},
本地 IPV4 地址是怎么查出來的?打開 cmd,輸入 ipconfig。無線局域網(wǎng)適配器 WLAN 里的 IPV4 即是。
nodejs 接收到了請求,就會執(zhí)行 server.js 里對應(yīng)的方法。
如何運行
首先 nodejs 服務(wù)器需要手動開啟,我還不會自動開啟。
右鍵 server 文件夾,在內(nèi)建終端中打開,然后在終端中輸入:
下面那句話說明正常啟動服務(wù)器并且開始監(jiān)聽。
我們輸出一下 res,看看成功會返回什么信息。調(diào)試器里的 console 輸出:
data 里是我們數(shù)據(jù)庫的查詢結(jié)果。
res.data 獲取這個15長度的 Array。
然后比如我們要獲取其中的 time 值,就是 res.data[0].time, res.data[1].time… res.dat[14].time。
{} 表示其中是一個對象變量,通過句號+索引名稱獲取特定的值。
而剛才的一直在監(jiān)聽的內(nèi)建終端里輸出:
這個的輸出對應(yīng) function(error,results,fields) 里的 console.log(results)。如果查詢失敗,error 也是在這個內(nèi)建終端里輸出。
常見問題
數(shù)據(jù)庫無法連接?
建好數(shù)據(jù)庫后,最好就先用 cmd 或 workbench 連接一下試試。如果能成功連接并查詢,之后出問題也可以排除 mysql 的一部分問題。
如果采用云服務(wù)器(如阿里云)連接不上,可能的問題有:
- 服務(wù)器端口 80 和 3306 沒開。(不建議一鍵全部放行,有被hacker get 的風(fēng)險)
- mysql 需要有一個用戶能在所有 ip 地址里對該數(shù)據(jù)庫進行讀寫操作,這里可以參考 DCL 的內(nèi)容來新建符合要求的 user。Mysql_9 SQL 語句——DCL_sql語言dcl_灰海寬松的博客-CSDN博客
- 服務(wù)器防火墻的問題,要開啟3306端口。
?
小程序報錯 ERR TIMEOUT
打開網(wǎng)站可以看到 404 顯示。
-
首先先確保前面那個問題確實解決了,該數(shù)據(jù)庫確實可以從本地連接,,不是數(shù)據(jù)庫的問題。
-
再確認 get post 方法是否對應(yīng),方法名是否寫錯。很多時候輸入了錯誤的鏈接也會顯示 404.
-
小程序不校驗合法域名是否打開。
-
啟用或關(guān)閉 windows 功能——Internet Information Services,及其可承載 web 核心,子項全部打開。點擊確定。如果成功啟動,在瀏覽器中輸入 127.0.0.1,應(yīng)該可以看到:
文章來源:http://www.zghlxwxcb.cn/news/detail-779237.html
-
檢查方法名,get post 類別是否寫錯。文章來源地址http://www.zghlxwxcb.cn/news/detail-779237.html
到了這里,關(guān)于微信小程序通過 node 連接 mysql——方法,簡要原理,及一些常見問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!