sql-server - Node.js SQL 服务器在接收多个请求时崩溃

标签 sql-server node.js typescript nodemon

我有一个 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 并使用其内置连接池来简化代码。

来自the documentation :

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/

相关文章:

Javascript 在 switch case 中进行多重决策

angular - 在新选项选择错误时使用多项选择的 react 形式

sql-server - 如何在 SQL 语句中按日期范围过滤而不包含时间组件

SQL 仅选择外键具有属性的行

sql-server - 在 Visual Studio 中使用 Linq 查询链接服务器

node.js - 如何使用@implements

c# - 使用表类型

javascript - 刷新后将项目添加到本地存储时,我丢失了其他项目

angular - RangeError : Maximum call stack size exceeded when using valueChanges. 订阅

reactjs - 在 typescript 中 react 高阶组件(HOC)