Node的mysql模块,本人的感受就是不好用,各种报错,各种坑,有一个问题困扰了我很久,也不知道是不是我使用的方式不对,不过后来用easymysql模块解决了,我才深信这是一个坑。

问题描述:

  假设有这么一个数据表table,它有两个字段index和name,在localhost:3000主页有一个按钮,上面写着“更新”,当我点击更新后会POST到localhost:3000/update,然后后台连接数据库进行更新操作每一条记录的name为“gdt”,更新完毕后回到主页,再重新按一下“更新”按钮,就会报错误,如下:

“{ [Error: Cannot enqueue Query after invoking quit.] code: 'PROTOCOL_ENQUEUE_AFTER_QUIT', fatal: false }”

  下面代码,省略了模块的引入以及数据库的连接操作,我使用的是异步流程控制Async来使得异步查询变成同步查询,在流程结束的最后connection会end,路由会重定向到localhost:3000,讲道理的话当我重新按“更新”按钮时会继续进行更新操作,而不是报错

exports.update = function(req, res) {//获得需要所有记录信息function getInfo() {return new Promise((resolve, reject) => {connection.query('SELECT `index`,`name` from table', function(err, result) {if (err) {console.log(err);} else {resolve(result);}})})}// 将每一项的名字更新为gdtfunction updateName(info) {return new Promise((resolve, reject) => {var index = info['index'];connection.query("UPDATE  `table` SET `tableB`.`name` = 'gdt' WHERE `table`.`index` =?", index, function(err, result) {if (err) {console.log(err);} else {resolve('更新成功');}})})}async function update() {        let result = '';//筛选出在公屏发言出现的环球uid和其对应的indexvar getinfoResult = await getInfo();for (let i = 0; i < getinfoResult.length; i++) {var updateResult = await updateName(getinfoResult[i]);console.log(updateResult);}        return result?result:'success';}update().then(function(result) {console.log(result);//断开数据库连接connection.end();//回到主页res.redirect('/');})
}

  这个问题我查阅了好多资料,问了好多人都没有得到解决,后来改用了easymysql模块就解决了,异步流程控制结束后页面重定向到首页,重新按下“更新”会执行更新操作,不会报错!

  上面的代码并没有改成easymysql的语法,关于easymysql的用法可以参阅 https://github.com/aleafs/easymysql,不过还是建议Node项目结合像MongoDB这样的NoSQL数据库,要不是公司业务要求我是不会使用mysql的,囧~

转载于:https://www.cnblogs.com/DTBelieve/p/5656277.html

Node中使用mysql模块遇到的问题相关推荐

  1. node中使用mysql模块的步骤

    // 终端中输入 npm i mysql , 安装mysql模块// 1. 加载mysql const mysql = require('mysql');// 2.设置连接参数,创建连接对象 cons ...

  2. node中操作MySQL

    node操作MySQL数据库: 在node中操作MySQL数据库的基本流程如下: // node操作MySQL需要在npm官网下载mysql包并载入node执行代码:// 1.载入MySQL数据库包v ...

  3. node中安装mysql

    说明 在node中安装mysql,因为在新建项目的时候node中是没有mysql的,就像java中缺少依赖一样,需要重新在项目当中添加. 在node项目中安装mysql命令 npm install m ...

  4. Node中的Http模块和Url模块的使用

    场景 如果我们编写后端的代码时,需要Apache 或者Nginx 的HTTP 服务器, 来处理客户端的请求相应.不过对Node.js 来说,概念完全不一样了.使用Node.js 时, 我们不仅仅在实现 ...

  5. Node 中的path模块

    参考文档:https://nodejs.org/docs/latest-v13.x/api/path.html path模块中的常用API: path.basename:获取路径的文件名,默认包含扩展 ...

  6. node中npm安装模块的网络问题

    最近使用node开发时,发现所有的依赖模块都安装不了啦,一直报错如下 rollbackFailedOptional: verb npm-session 5a4a66a1b8d06dc3 后来才发现是由 ...

  7. php中的mysql模块

    在php_mysqlnd中的PHP_MINIT_FUNCTION中mysqlnd库的初始化 static PHP_MINIT_FUNCTION(mysqlnd) {REGISTER_INI_ENTRI ...

  8. Node中的fs模块

    1.fs.stat检测是文件还是目录 2.fs.mkdir创建目录 3.fs.writeFile创建写入文件 4.fs.appendFile追加文件 5.fs.readFile 读取文件 6.fs.r ...

  9. 在node中使用request模块和superagent请求接口

    1.通过request请求接口 首先是get请求的使用,如下: request({url: 'address',method: 'GET' //get大小写都可以 }, (err, res, data ...

最新文章

  1. 监控子进程,退出就重启进程 ,简单版本
  2. FUSE队列管理浅析
  3. Android 自定义ListView单击事件失效
  4. FreeMarker 一二事 - 静态模板的使用与生成
  5. VTK:RenderMan之PolyDataRIB
  6. 使用 Carla 和 Python 的自动驾驶汽车第 4 部分 —— 强化学习Action
  7. Eureka服务注册中心---SpringCloud
  8. 设计模式-Builder和Factory模式区别
  9. 2019年1月份GitHub上最热门的Java开源项目
  10. python判断文件是否打开_python如何判断一个文件是否处于打开状态?
  11. [转]C++异常处理 4
  12. oa服务器维护,办公系统维护,维护oa系统的方法
  13. java+ElementUI前后端分离旅游项目第三天 报团游
  14. 【TcaplusDB知识库】快速上手TDR表的增删查改操作
  15. 2012年8月编程语言排行榜:C# 的航向在哪里
  16. GIS 地图坐标系相互转换的方法学习笔记
  17. 本地用户和组 无法访问计算机 远程过程调用失败,如何解决远程过程调用失败?怎样使用向日葵远程控制?...
  18. android 壁纸 官方网站,wallsplash - 壁纸从未如此精美 #Android
  19. 家装与家电的碰撞,三星电视诠释“新春换新”的“新选择”
  20. 学服务端(git高级)的第3天

热门文章

  1. App主流UI框架结构
  2. socket通信简单介绍
  3. 用汇编写改进的冒泡排序
  4. hdu 2025 查找最大元素
  5. RaySync 传输协议的有效带宽利用率分析介绍
  6. MediaPlayer使用方法简单介绍
  7. MPLS服务合同到期了,是否该续签?
  8. setXxx()和getXxx()的作用
  9. 给文本框添加模糊搜索功能(“我记录”MVC框架下实现)
  10. JAVA中的方法和构造方法有什么区别