nodeJS踩坑之路---數據庫篇。

目錄

連接數據庫

常見問題一:怎麼看數據庫是否連接成功。

常見問題二:怎麼對數據庫返回的數據進行操作。

進行數據庫操作時常見的mysql錯誤:

1.Nodejs中“循環+異步” :當我們在sql下用返回的數據調用foreach再進行sql查詢,此時內層foreach下的sql查詢存在異步問題。


連接數據庫

下載mysql模塊:npm install --save mysql

引用mysql模塊:const mysql = require('mysql');//引入mysql連接數據庫的中間件

創建鏈接池:db = mysql.createPool({host:'localhost',post:'3306',user:'root',password:'******',database:'數據庫名'});

對數據庫進行操作:

db.query(`SELECT * FROM user `,(err,data) => {

if(err){

res.status(500).send("數據庫操作出錯");

}else{

res.send(data)
}

})

常見問題一:怎麼看數據庫是否連接成功。

直接打印db,如果db中包含了自己的數據庫的一些信息,則表示數據庫連接成功。

常見問題二:怎麼對數據庫返回的數據進行操作。

對於數據庫直接返回的data返回的是一個數組對象,但是沒法直接取裏面的值。可以通過JSON進行兩次封裝,就可以轉化爲正常數組對象啦。

let results = JSON.stringify(data);

let newdata = JSON.parse(results);

此時的newdata已經是正常的數組對象啦,可以進行常規操作了。

進行數據庫操作時常見的mysql錯誤:

1.Nodejs中“循環+異步” :

當我們在sql下用返回的數據調用foreach再進行sql查詢,此時內層foreach下的sql查詢存在異步問題。

靈感解決來源:http://blog.csdn.net/fangjian1204/article/details/50585073

解決方法一:使用async組件。

 

引入組件:npm install --save async

使用組件:var async = require('async');

db.query(`SELECT u.u_id,u.u_name,u.u_img,u.u_company,u.u_major,c.c_id,c.c_upid,c.c_content,c.c_ftime,c.c_support

FROM comment c,user u WHERE c.c_uid = u.u_id and c_aid = '${req.body.a_id}' and c_upid = '' `, (err, rows)=> {

if (err) {

console.log(err);

res.status(500).send('插入數據庫錯誤');

}else{

resData.returnCode = 0;

resData.returnMsg = '獲取文章列表成功';

async.map(rows, (item, callback) => {

db.query( `SELECT u.u_id,u.u_name,u.u_img,u.u_company,u.u_major,c.c_id,c.c_upid,c.c_content,c.c_ftime,

c.c_support FROM comment c,user u WHERE c.c_uid = u.u_id and c_upid = '${item.c_id}' `, (err, tags) => {

let newResults = JSON.stringify(tags);

newChildData = JSON.parse(newResults);

item.childrenList = newChildData;

callback(null, item);

});

}, function(err,results) {

resData.data = results;

res.send(JSON.stringify(resData));

});

}

});

上面的resData是我爲了返回後端封裝的一個返回數據對象。下面是封裝好的數據,返回給了前臺。

2.sql語句報錯:Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '','7512a5cf-c195-42a1-97d0-c0d0fb699824','1577958435000','0')' at line 2

解決:錯誤的意思是說,你在 7512a5cf-c195-42a1-97d0-c0d0fb699824','1577958435000','0') 這一塊代碼處有個錯誤。具體在哪兒呢,先從他說的代碼地方開始

db.query(`INSERT INTO collection (coll_id,coll_uid,coll_aid,coll_status,coll_time,coll_wuid,coll_wtime,coll_invalid) VALUES

('${uuid.v4()}','${req.body.coll_uid}','${req.body.coll_aid}','0',${timeObj.getTimeStamp()}','${req.body.coll_aid}',

'${timeObj.getTimeStamp()}','0')`,(err,data) => {

結果發現在獲取coll_time時,${timeObj.getTimeStamp()}外的單引號少一個,因爲這段是複製過來改的,改的時候寫錯了。

3. sql語句報錯:Error: ER_WRONG_VALUE_COUNT_ON_ROW: Column count doesn't match value count at row 1

錯誤的意思是你的sql語句中的字段與數據庫表中的字段不匹配。

我的問題是在insert中,少插入了一條數據,造成的錯誤。

更新中...

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