我使用Node.JS和MySQL使用此驱动程序 - https://github.com/mysqljs/mysql
会遇到奇怪的行为基本上,我在前端有一个按钮,触发app.get
在数据库中进行查询,我很乐意在后端使用结果。
这很好用,直到我按下按钮4-5次,在那里查询锁定,我必须等待2-3分钟,直到他们继续执行。我有一个类似的写函数,行为方式相同。
这是否有可能是一个问题,因为我试图异步执行完全相同的查询?即我必须从前端限制它还是后端问题?
关于如何调试究竟发生了什么的任何想法?
// 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');
}
提前感谢任何输入。
答案 0 :(得分:1)
我看到一些问题:
function read(id, done) {
con.getConnection(function(id, connection){...}
}
注意如何通过将同一名称赋予id
回调的参数来覆盖传递给read
的{{1}}。
此外,您的Express路线实际上并未通过发送回复来结束请求,这会使您的浏览器超时连接。在某些时候,它甚至会拒绝发送更多请求,因为有太多请求仍在等待。
因此请务必结束请求:
getConnection
提示:你应该使用Node的回调调用convertion,其中第一个参数表示错误(如果有的话),第二个参数表示返回值。