【问题标题】:Inserting Values into MySQL DB using NodeJS Not Working使用 NodeJS 将值插入 MySQL 数据库不起作用
【发布时间】:2021-08-04 10:10:30
【问题描述】:

目前,我在使用 NodeJS Express 服务器将数据插入我的 MySQL 数据库时遇到了一个非常令人沮丧的问题。

我目前的设置如下:
• DigitalOcean 液滴上的 MySQL 服务器数据库。
• 同一DigitalOcean 液滴上的NodeJS Express 服务器。它由我在同一个 droplet 上的 Apache 服务器代理。我让 Node 服务器与 PM2 一起运行。

我已经能够成功地从我的数据库中读取数据(即SELECT * from performance);)。 但是,无论我尝试什么,我都无法将任何数据插入到我的数据库中。我尝试了无数不同的解决方案,但都没有奏效。

我们将不胜感激。如果需要,请提出任何问题以进一步澄清。谢谢。

我当前与 MySQL 相关的代码:

server.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,但我根本没有到达那个端点。

【问题讨论】:

  • 看看 sequelize.org。使用 ORM 比编写自己的查询要好得多。
  • 请分享错误信息
  • 谢谢@recoilnetworks,我会调查的。罗玛拉惹,这是问题的一部分。据我所知,运行插入查询时没有错误。我应该在某个地方寻找以确保没有错误吗?
  • 我刚刚用一些信息更新了我的帖子。请看一看。

标签: mysql node.js express digital-ocean


【解决方案1】:

经过几个小时的调试,我想我找到了问题所在。

几乎所有展示如何使用 Node 连接到 MySQL 数据库的教程都表明您应该在 con.connect() 调用中嵌入 con.query() 调用,并且在 MySQL 文档中建议使用 connect()。

不过,con.query() 也会建立连接。也许是因为我让服务器在多个调用中保持活跃,但这会导致我在帖子中描述的握手错误。删除包装 con.connect() 调用解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多