目錄
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中,少插入了一條數據,造成的錯誤。
更新中...