NodeJs访问MySQL老是报Pool Close问题。
来源:互联网 发布:软件企业即征即退期限 编辑:程序博客网 时间:2024/05/22 20:08
最近在写一个接口配置管理的一个东西。
比如前端要一个用户登录接口,是post请求,之前写的话,就是规规矩矩的在后台写代码,
通过路由什么怎么的跳转到相应的方法那里,然后获取到传过来的参数,拿到参数后,再调用数据库查询,判断用户存在与否
最后返回结果给前端。
我现在写的这个东西,将以前的这些步骤全都以抽里出一条或几天规则,然后按照事先定义好的顺序,由上而下依次执行,最后返回结果给调用者。
以后我只配置规则,不用开发接口,少接口只要在管理页面里添加一条就OK了,想改参数什么的,也只在管理界面修改即可完成,这样也不用重启服务器。
之前在NodeJs在调用MySQL的时候,由于我写的那个DBHelper类里创建连接,以是Pool的时候创建的,代码如下
this.pool = mysql.createPool({ connectionLimit: 5, host: 'localhost', // 数据库连接 user: 'liaohb', // 数据库名用户名 password: 'xiaotuni', // 密码 database: 'nodejs' // 表空间 });
由于每来一个请求都会createPool一个池,处理后我会调用 .end 方法来释放。
NodeJs是异步处理的,当前还没有处理完呢,后面的请求也接口着了,正在这个时候,前面调用了.end方法,后台还没有处理完的就开始报 pool close信息。
弄得我头都大了,今天突然想起来了用队列来管理请求,是不是就不会出现在这种情况了。
于是就写一个队列类,用来管理当前请求的,来一个就往队列里插入一个请求,由于队列的规则是先进先出的原理。
这样我瑞在创建createPool的时候,就不会出现在,前端调用 .end 时候,后面调用数据库请求的时候报 pool close的错误了。
我写的这个队列其实非常的简单,在这里标记一下。
/** * 队列管理,主要是用来处理量请求时 * 由于要调用数据库,大量的请求,在调用的时候 * 前面调用 .end方法,后面就会出现在pool close的情况。 * * 也许还有其它好的办法,目前就想到了这种方法。 * * @class ManagerQueue */class ManagerQueue { /** * 创建一个带参数的构造函数 * @param {any} MySqlHelper mysql操作类 * @memberof ManagerQueue */ constructor(MySqlHelper) { this._Queue = []; this.IsLock = false; this.MySqlHelper = MySqlHelper; } /** * 添加请求到队列里 * * @param {any} options 参数 * @memberof ManagerQueue */ AddQueue(options) { this._Queue.push(options); this.GetQueueLength(); if (!this.IsLock) { this.IsLock = true; const args = this._Queue.shift(); setTimeout(() => { this.NextQueue(args); }, 0); } } /** * 下一个 * * @returns * @memberof ManagerQueue */ Next() { const { _Queue } = this; if (_Queue.length === 0) { this.IsLock = false; console.log('---------队列处理完了------'); return; } this.GetQueueLength(); setTimeout(() => { this.NextQueue(_Queue.shift()); }, 0); } /** * 执行下一请求 * * @param {any} args * @returns * @memberof ManagerQueue */ NextQueue(args) { // .... } /** * * * @memberof ManagerQueue */ GetQueueLength() { console.log('---------队列大小为:【%d】--------', this._Queue.length); return this._Queue.length; }}module.exports = ManagerQueue;
接口配置管理在 Github 上有,管理界面如下,有点丑呀,哈哈~~
阅读全文
0 0
- NodeJs访问MySQL老是报Pool Close问题。
- nodejs解决mysql和连接池(pool)自动断开问题
- struts2老是报input问题
- nodejs之generic-pool数据库连接池(mysql)
- 使用Navicat for MySQL访问数据库老是提示ip不能连接mysql问题
- mysql thread pool 问题排查
- webdriver.close 报错问题 解决方案
- nodejs连接mysql之使用连接池pool
- centos 7 解决mysql外部访问报错问题
- android 老是报ClassNotFoundException
- 刚装的phpmyadmin 老是报访问被拒绝的错误
- Nodejs 数据库连接池generic-pool
- nodejs之pool连接池
- nodejs mysql pool 只能插入10条记录或者较少记录
- mysql服务老是不见
- win2008阿里一键环境包mysql老是1067报错
- Android程序老是报错
- eclipse老是间歇性报ThreadPoolExecutor
- Python多线程/多进程操作队列
- iOS 导航栏标题不居中的解决办法
- 【华为机试】无线OSS-高精度整数加法
- 【思维的乐趣】算法实例
- Java程序员必须知道的几种系列辅助开发工具
- NodeJs访问MySQL老是报Pool Close问题。
- 【NYOJ
- 重新复习的JAVA基础(浅出)!留着慢慢看。。
- org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1,actual 0 1
- [Leetcode] 349. Intersection of Two Arrays 解题报告
- C# RSA加密与解密
- 01 HDFS
- 2018校招笔试题——网易编程题跳石板
- 如何用合泰触摸软件包生成的文件,建立一个工程项目。