![](/img/trans.png)
[英]Inserting multiple values in mysql using nodejs is causing parsing errors
[英]Inserting Values into MySQL DB using NodeJS Not Working
目前,我在使用 NodeJS Express 服務器將數據插入 MySQL 數據庫時遇到了一個非常令人沮喪的問題。
我當前的設置如下:
• DigitalOcean 液滴上的 MySQL 服務器數據庫。
• 同一DigitalOcean 液滴上的NodeJS Express 服務器。 它由我的 Apache 服務器代理,該服務器位於同一個 droplet 上。 我讓 Node 服務器與 PM2 一起運行。
我已經能夠成功地從我的數據庫中讀取數據(即SELECT * from performance);
)。 但是,無論我嘗試什么,我都無法將任何數據插入到我的數據庫中。 我嘗試了無數不同的解決方案,但都沒有奏效。
幫助將不勝感激。 如果需要,請提出任何問題以進一步澄清。 謝謝你。
我當前與 MySQL 相關的代碼:
服務器.js
var mysql = require('mysql');
var con = mysql.createConnection({
host: 'localhost',
user: 'user',
password: 'password',
database: 'analytics',
supportBigNumbers: true,
debug: true,
});
server.post('/performance', (req, res) => {
let d = req.body;
con.connect(function (err) {
if (err) throw err;
let q =
'INSERT INTO performance (uid, reqStart, resEnd, loadDuration) VALUES ?';
let values = []; // values to be inserted into db
// for testing purposes I have commented this out and tried inserting a hardcoded set of values instead
/*let body = JSON.parse(req.body); // json string body to json obj
body.data.forEach((x) => {
values.push([body.uid, x.reqStart, x.resEnd, x.loadDuration]);
});*/
values = [
[23299730, 8.3282343284, 8.121252244, 2.238932989],
[23288734, 8.3282343284, 8.121292244, 2.238932989],
];
con.query(q, [values], function (err, result) {
if (err) throw err;
});
});
res.send(d);
});
更新:我只是手動運行我的服務器(沒有 PM2)。 這使我能夠查看控制台消息。 我第一次看到一個成功的插入查詢。 在使用 PM2 運行服務器時,我也得到了成功的查詢。 但是,在第二次嘗試時,我得到PROTOCOL_ENQUEUE_HANDSHAKE_TWICE
錯誤。
基於多篇其他帖子/文章,我認為我的代碼避免了這個問題,但它在我調用 con.connect(...) 的那一行出錯了。 我在 server.get 路由中有 con.connect ,但我根本沒有到達那個端點。
經過幾個小時的調試,我想我找到了問題所在。
幾乎所有展示如何使用 Node 連接到 MySQL 數據庫的教程都表明您應該在con.query()
con.connect()
調用,並且在 MySQL 文檔中建議使用connect()
。
然而, con.query()
也建立了一個連接。 也許是因為我讓服務器在多個調用中保持活躍,但這會導致我在帖子中描述的握手錯誤。 刪除包裝con.connect()
調用解決了我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.