gpt4 book ai didi

mysql - Node.JS 和 MySQL - 查询锁定并且执行速度极其缓慢

转载 作者:行者123 更新时间:2023-11-29 10:54:29 25 4
gpt4 key购买 nike

我在使用 Node.JS 和 MySQL 以及此驱动程序时遇到奇怪的行为 - https://github.com/mysqljs/mysql

本质上,我在前端有一个按钮,可以触发 app.get 在数据库中进行查询,我可以愉快地在后端使用结果。

这工作得很好,直到我在一秒钟内按下按钮 4-5 次,当查询锁定时,我必须等待 2-3 分钟才能继续执行。我有一个类似的写入函数,其行为方式相同。

这是否可能是一个问题,因为我正在尝试异步执行完全相同的查询? IE。我必须从前端限制它还是后端问题?

关于如何调试到底发生了什么有什么想法吗?

// database.js

var mysql = require('mysql');

var pool = mysql.createPool({
connectionLimit: 100,
host : 'localhost',
user : 'secret',
password : 'secret',
database : 'mydb'
});

exports.getConnection = function(callback) {
pool.getConnection(function(err, connection) {
callback(err, connection);
});
};
<小时/>
// dbrw.js
var con = require('../config/database');

function read(id, done) {
con.getConnection(function(err, connection){
if(!err){
connection.query("SELECT * FROM users WHERE id = ?",[id], function(err, rows) {
connection.release();
if (err)
done(err);
if (rows.length) {
console.log("rows " + JSON.stringify(rows));
done(rows[0].progress);
};
});
}
else {
console.log(err);
}
});
}

exports.read = read;
<小时/>
// routes.js
var dbrw = require('./dbrw.js');

app.get('/read', isLoggedIn, function(req, res) {
dbrw.read(req.user.id, function(result) {
console.log(result);
});
});
<小时/>
// Frontend - angular app.js

$scope.tryread = function() {
$http.get('/read');
}

预先感谢您的任何意见。

最佳答案

我发现一些问题:

function read(id, done) {
con.getConnection(function(id, connection){...}
}

请注意如何通过为 getConnection 的回调参数指定相同的名称来覆盖传递给 readid

此外,您的 Express 路由实际上不会通过发回响应来结束请求,这将使您的浏览器连接超时。在某些时候,它甚至会拒绝发送更多请求,因为仍有太多请求处于待处理状态。

因此请确保结束请求:

app.get('/read', isLoggedIn, function(req, res) {
dbrw.read(req.user.id, function(result) {
console.log(result);
res.end(); // or `res.send(result)`
});
});

还有一个提示:您应该使用 Node 的回调调用转换,其中第一个参数表示错误(如果有),第二个参数表示返回值。

关于mysql - Node.JS 和 MySQL - 查询锁定并且执行速度极其缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43211999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com