• Node中使用mysql模块遇到的问题


      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的,囧~

  • 相关阅读:
    Data Base mysql备份与恢复
    java 乱码问题解决方案
    【知识强化】第二章 物理层 2.1 通信基础
    【知识强化】第二章 进程管理 2.2 处理机调度
    【知识强化】第二章 进程管理 2.1 进程与线程
    【知识强化】第一章 操作系统概述 1.3 操作系统的运行环境
    【知识强化】第一章 网络体系结构 1.1 数据结构的基本概念
    【知识强化】第一章 网络体系结构 1.2 计算机网络体系结构与参考模型
    【知识强化】第一章 网络体系结构 1.1 计算机网络概述
    【知识强化】第一章 操作系统概述 1.1 操作系统的基本概念
  • 原文地址:https://www.cnblogs.com/DTBelieve/p/5656277.html
Copyright © 2020-2023  润新知