微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

节点 MySQL 挂起

如何解决节点 MySQL 挂起

我有我的 GET 端点,它只是一个简单的 SELECT * FROM tableName 并返回表中的所有行,但它一直挂着。当我在 POSTMAN 本地点击它时,它只是继续旋转

发送请求...并且程序永远不会出错。 在 connection.query(...) 之后 get 端点挂起,第四个 console.log("HIT) 未打印

router.get('/allRows',async (req,res) => {
    console.log("HIT")
    if (req.query.tableName) {
        console.log("HIT")
        connection.connect((err) => {
            if (err) console.log(err);
            console.log("HIT")
            connection.query(`SELECT * FROM ${req.query.tableName};`),(err,result,fields) => {
                console.log("HIT")
                if (err) console.log(err);
                console.log(result)
                res.status(200).json({
                    message: `Successfully got all data from ${req.query.tableName}`,result: result
                });
            };
            connection.end((err) => {
                if (err)
                    console.error("Error when closing connection",err)
            });
        })
    }
    else {
        res.status(400).json({
            message: `Please provide table name`,});
        console.log('Missing table name');
    }
});

我现在有 3 个“HIT”日志,有什么想法吗?

我注意到,如果我在 postman 中取消无休止的请求并再次点击端点,我会收到 PROTOCOL_ENQUEUE_AFTER_QUIT 错误

编辑

我将代码更改为:

    router.get('/allRows',res) => {
    console.log("HIT")
    // also another guard for table name inside an array is needed
    if (req.query.tableName) {
            console.log("HIT")
            connection.connect();
            connection.query(`SELECT * FROM ${req.query.tableName}`),rows,fields) => {
                console.log("HIT",rows)
                if (err) console.log(err);
                res.status(200).json({
                    message: `Successfully got all data from ${req.query.tableName} LIMIT 1`,result: rows
                });
                console.log("result")
            };
    }
    else {
        res.status(400).json({
            message: `Please provide table name`,});
        console.log('Missing table name');
    }
});

仍然遇到同样的问题,只有 2 个控制台点击...我已经运行了调试器,当它到达 connection.query 时,它只是跳过它并且没有进入箭头函数

debugger at connection.query

debugger after connection.query

解决方法

根据模块文档,connection.connect 将构建到数据库的实时链接。

在服务器启动时调用它,并在服务器关闭时停止它。

当您想解决请求时调用 connection.query。

connection.connect()

router.get(
   .....

  connection.query()
)

server.on(‘close’,()=> connection.close()) // I guess

连接错误:

connection.connect(function(err) {
  console.log(err.code); // 'ECONNREFUSED'
  console.log(err.fatal); // true
});
router.get(
   .....

  connection.query()
)

server.on(‘close’,()=> connection.close()) // I guess

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。