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);
}
}) })
} // 将每一项的名字更新为gdt
function 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和其对应的index
var 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的,囧~

Node中使用mysql模块遇到的问题的更多相关文章

  1. node.js使用mysql模块的坑

      之前用node.js写的订餐系统,很容易挂掉,一直也没想去解决它.今天看了一下,试了试,原因是在连接数据库的时候没有对error事件进行处理,导致程序一直挂在那里,需要重启服务才能正常使用.   ...

  2. 常用SQL语句及在node中使用MySQL

    摘要:一些重要的SQL命令 SELECT - 从数据库中提取数据 UPDATE - 更新数据库中的数据 DELETE - 从数据库中删除数据 INSERT INTO - 向数据库中插入新数据 CREA ...

  3. Node中使用MySQL报错:TypeError: Cannot read property 'query' of undefined

    Node中使用MySQL报错: TypeError: Cannot read property 'query' of undefined at /Users/sipeng/Desktop/彭思/201 ...

  4. Node中的net模块提供的前端通信

    Node中的net模块提供的前端通信 客户端 业务: 客户端现在要在终端输入内容,然后回车发送内容给服务器 解决: Node中提供了一个叫做 readline 的 模块用于读取命令行内容 [ 单行读取 ...

  5. 关于node中两个模块相互引用却不会死循环的问题

    关于node中两个模块相互引用却不会死循环的问题 node中是通过require来导入加载模块的,require有两个作用: 1.加载文件模块并执行里面的代码 2.拿到被加载文件模块导出的接口对象 现 ...

  6. 在Node.js使用mysql模块时遇到的坑

    之前写了个小程序Node News,用到了MySQL数据库,在本地测试均没神马问题.放上服务器运行一段时间后,偶然发现打开页面的时候页面一直处于等待状态,直到Nginx返回超时错误.于是上服务器检查了 ...

  7. Node中的http模块

    通过Node模块,我们可以实现客户端和服务器端.这篇文章主要研究如何利用http和一些相关模块构建客户端和服务器端代码.读完本文,将能够实现client向server发送数据,而server将数据原样 ...

  8. Node中require第三方模块的规则

    Node.js中使用CommonJs模块化机制,通过npm下载的第三方包,我们在项目中引入第三方包都是:let xx = require('第三方包名'),究竟require方法加载第三方包的原理机制 ...

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

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

随机推荐

  1. NetworkX初相识

    听说NetworkX是一个很牛的复杂网络研究的工具,就来试一下吧. import networkx as nx G= nx.Graph()#建立一个空白的图 G.add_node("node ...

  2. 快速排序(一) 思想 JAVA实现

    已知数组59.71.37.56.88.96.21.58.48.43 采用快速排序将数组有序. 快速排序同样采用了“分治策略”,使用递归的思路来实现算法. 快速排序的算法思想: 9.71.37.56.8 ...

  3. centos6+如何对外开放80,3306端口号或者其他端口号

    1.查看防火墙对外开放了哪些端口 [root@hadoop110 ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt sour ...

  4. jeesite模块解析,功能实现

    做为十分优秀的开源框架,JeeSite拥有着很多实用性的东西. 默认根路径跳转 定义了无Controller的path<->view直接映射 <mvc:view-controller ...

  5. JavaWeb学习笔记(五)—— request

    一.request概述 request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest.在客户端发出每个请求时,服务 ...

  6. flask总结05(在 Flask 项目中解决 CSRF 攻击)

    一:安装 flask_wtf pip install flask_wtf 二:设置应用程序的 secret_key,用于加密生成的 csrf_token 的值 # session加密的时候已经配置过了 ...

  7. 洛谷 P3233 [HNOI2014]世界树(虚树+dp)

    题面 luogu 题解 数据范围已经告诉我们是虚树了,考虑如何在虚树上面\(dp\) 以下摘自hzwer博客: 构建虚树以后两遍dp处理出虚树上每个点最近的议事处 然后枚举虚树上每一条边,考虑其对两端 ...

  8. BZOJ 5168 && Luogu P3740 [HAOI2014]贴海报 线段树~~

    据说某谷数据十分水...但幸好BZOJ上也过了...话说我记得讲课时讲的是奇奇怪怪的离散化..但现在突然觉得什么都可以线段树瞎搞了...QAQ 直接就是这个区间有没有被覆盖,被覆盖直接return: ...

  9. 队列 102 Binary Tree Level Order Traversal

    队列的基本应用 - 广度优先遍历 1)树 : 层序遍历: 2)图:无权图的最短路径. 使用队列来实现二叉树的层序遍历,需要多关注一个层数的信息 /** * Definition for a binar ...

  10. 114th LeetCode Weekly Contest Array of Doubled Pairs

    Given an array of integers A with even length, return true if and only if it is possible to reorder ...