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. C# 精准计时之 QueryPerformanceCounter QueryPerformanceFrequency用法

    C# 用法: public static class QueryPerformanceMethd { [DllImport("kernel32.dll")] public exte ...

  2. 条目十二《切勿对slt容器的线性安全性又不切实际的依赖》

    条目十二<切勿对slt容器的线性安全性又不切实际的依赖> 这一条目,我想用简短而有力的语句来总结. stl库是为了照顾大多数情况,而不是某一领域,如果在库层次实现线性安全,很大可能是对性能 ...

  3. 浅谈PHP的Public、Protected、Private三种方法的区别

    public:权限是最大的,可以内部调用,实例调用等.protected: 受保护类型,用于本类和继承类调用.private: 私有类型,只有在本类中使用. <?php error_report ...

  4. 构建docker镜像

    一.通过docker commit命令构建镜像 docker commit 构建镜像可以想象为是将运行的镜像进行重命名另存一份.我们先创建一个容器,并在容器里做出修改,就像修改代码一样,最后再将修改提 ...

  5. IOS mac入门

    https://sarin.iteye.com/blog/1754920 注册Apple开发者平台账号 ## https://www.cnblogs.com/liuluoxing/p/6549725. ...

  6. 制作一句话图片马(NO)

  7. day13--------python 内置函数(一)

    一:内置函数 内置函数就是python直接提供可以用的 01:作用域相关: locals() 返回当前作用域中的名字 globals() 返回全局作用域中的名字 02:迭代器相关: range() 生 ...

  8. css样式继承经验记录

    与元素(文字颜色.字体等)相关的样式默认会被继承: 与元素在页面上的布局相关的样式默认不会被继承: <body> <p>I like <span>aplles< ...

  9. 洛谷 P2482 loj #2885 [SDOI2010]猪国杀 题解【模拟】【贪心】【搜索】

    好玩的模拟题. 以后要经常写模拟题鸭 题目描述 游戏背景 <猪国杀>是一种多猪牌类回合制游戏,一共有\(3\)种角色:主猪,忠猪,反猪.每局游戏主猪有且只有\(1\)只,忠猪和反猪可以有多 ...

  10. HDU - 2203 KMP水题

    循环移位的套路操作就是一份折开变两份 /*H E A D*/ void match(){ int n=strlen(T+1); int m=strlen(P+1); int j=0; rep(i,1, ...