簡體   English   中英

使用 NodeJS 將值插入 MySQL 數據庫不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM