在我的node.js应用程序中,我使用mysql库进行数据库连接。
当我启动我的节点服务器时,我可以很好地查询数据库--没有问题。
当我在5分钟后查询数据库时,服务器返回以下错误:
{"code":"PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR","fatal":false}如果我重新启动我的node.js服务器,我可以再次查询,没有任何问题,…
这是我的密码
const mysql = require('mysql');
let connection = mysql.createPool({
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
database: config.mysql.database
});
router.post('/subscription', (req, res) => {
const user = req.body;
const q = 'INSERT into Subscription SET ?';
connection.query(q, user, (err, results) => {
if (err)
return res.json(err);
return res.json(results);
});
});我使用过mysql.createConnection和mysql.createPool…。还尝试用connection.end…手动结束连接。。
两个结果的结尾都是相同的错误。
发布于 2018-06-12 18:35:53
您需要从池中获得一个连接并使用它,而不是查询池本身。当从池获得连接时,池将确保从池获得有效连接。所以你的代码是:
const mysql = require('mysql');
let pool = mysql.createPool({
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
database: config.mysql.database
});
router.post('/subscription', (req, res) => {
const user = req.body;
const q = 'INSERT into Subscription SET ?';
pool.getConnection(function(err, connection) {
if (err)
return res.json(err);
connection.query(q, user, (err, results) => {
if (err)
return res.json(err);
return res.json(results);
});
})
});更新
您不需要执行单独的pool.getConnection和connection.query,您可以将它们组合成一个pool.query,它将得到一个连接,执行查询并释放连接。因此,更新的代码将是:
const mysql = require('mysql');
let pool = mysql.createPool({
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
database: config.mysql.database
});
router.post('/subscription', (req, res) => {
const user = req.body;
const q = 'INSERT into Subscription SET ?';
pool.query(q, user, function(err, connection) {
if (err)
return res.json(err);
return res.json(results);
});
});https://stackoverflow.com/questions/50801849
复制相似问题