【发布时间】: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