我有一个 NodeJS 应用程序,它是我的服务器,我创建了一个数据库类来帮助我处理 SQL 数据库的查询。如果我在彼此之间发送一秒钟的请求,一切都会运行良好..没有问题..但是如果我开始向我的服务器发送垃圾邮件请求,它会因Error: Cannot enqueue Quit after invoking quit.
而崩溃
这是我的数据库类中的查询函数
static query(query: string): Promise<any> {
console.log('Query: ' + query);
return new Promise((resolve, reject) => {
this.connect().then(success => {
sqlConn.query(query, (err, results) => {
if (err) { return reject(err);
} else {
return resolve(results);
}
});
}).catch(err => {
return reject(err);
}).then( () => {
if (sqlConn.state !== 'disconnected') {
sqlConn.end();
}
});
});
};
这是 this.connect()
功能
static connect(): Promise<any> {
return new Promise((resolve, reject) => {
sqlConn = mysql.createConnection(this.connectionData);
sqlConn.connect(err => {
if (err) { return reject(err); } else {
return resolve('SQL connection established');
}
});
});
};
I'm pretty sure the problem appears sometimes, it would still be processing one query, and then another query comes before the first one finishes, so it would call
sqlConn.end()
twice, even when it's already disconnected? Any help is greatly appreciated...> Main goal is for the query to wait till it's 100% done before it runs the next one..
最佳答案
您可以通过使用 npm 模块 mysql
并使用其内置连接池来简化代码。
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bob',
password : 'secret',
database : 'my_db'
});
pool.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});
当然,您可以创建自己的函数来 promise 调用,如下所示:
function query (sql) {
return new Promise((resolve, reject) => {
pool.query(sql, (error, results, fields) =>
error ? reject(error) : resolve({ results, fields });
};
}
关于sql-server - Node.js SQL 服务器在接收多个请求时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46101906/