【问题标题】:Configuration mysql node js error Can not enqueue Query after fatal error配置mysql节点js报错Can not enqueue Query after fatal错误
【发布时间】:2019-07-20 03:31:59
【问题描述】:

我有一个应用程序 nodejs 在 pm2 上运行。

我的应用程序有一个奇怪的行为,我无法识别问题,运行了一段时间,3 4 或 5 天 应用程序在尝试进行需要与数据库连接的简单登录时发生以下错误:

致命错误后无法将查询入队

我已尽一切可能试图找出这个问题的原因,但尚未确定数据库服务器中的一个下降。

有人可以帮忙,也许是连接银行的方式不对。

数据库连接配置db.js

const mysql = require('mysql');

const connection = mysql.createConnection({
    connectionLimit : 20,
    host     : '******',
    port     : 3306,
    user     : '******',
    password : '******',
    database : '******'
});

connection.connect(function(err) {
    if (err) {
        console.log('Conexão com banco ocorreu erro. ' + err + ' ' + err.code);
        return;
    }
    console.log('Conexão com banco ok!');
});

module.exports = connection;

路线usuario

var express = require('express');
var router = express.Router();

var usuarioController  = require('../controllers/usuario-controller');

router.get('/find/:id', usuarioController.findUsuario);

module.exports = router;

usuarioController

var db = require('../models/db');

var usuarioController = {


    findUsuario: function(req, res) {

        var codigoPessoa = req.params.id;

        var sql = "SELECT p.codigoPessoa As codigo, "+
                  "  p.nome AS nome "+
                  "  FROM tpessoa p, "+
                  "      tusuario u "+
                  "  WHERE p.codigoPessoa = u.codigoPessoa "+
                  "  AND u.codigoPessoa = " + codigoPessoa;

        db.query(sql, function (err, rows) {
            if (err) {

                var message = err.message;

                return res.status(500).send(message);

            } else {

                res.status(200).json(rows);
            }
        });
    },
};

module.exports = usuarioController;

错误

Error: Connection lost: The server closed the connection.
    at Protocol.end (/home/softaction/apps_nodejs/node_modules/mysql/lib/protocol/Protocol.js:112:13)
    at Socket.<anonymous> (/home/softaction/apps_nodejs/node_modules/mysql/lib/Connection.js:97:28)
    at Socket.<anonymous> (/home/softaction/apps_nodejs/node_modules/mysql/lib/Connection.js:502:10)
    at emitNone (events.js:111:20)
    at Socket.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1064:12)
    at args.(anonymous function) (/opt/nvm/versions/node/v8.11.3/lib/node_modules/pm2/node_modules/event-loop-inspector/index.js:138:29)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
Error: Cannot enqueue Query after fatal error.
    at Protocol._validateEnqueue (/home/softaction/apps_nodejs/node_modules/mysql/lib/protocol/Protocol.js:200:16)
    at Protocol._enqueue (/home/softaction/apps_nodejs/node_modules/mysql/lib/protocol/Protocol.js:138:13)
    at Connection.query (/home/softaction/apps_nodejs/node_modules/mysql/lib/Connection.js:200:25)
    at Strategy._verify (/home/softaction/apps_nodejs/security/autenticacao.js:66:16)
    at Strategy.authenticate (/home/softaction/apps_nodejs/node_modules/passport-local/lib/strategy.js:88:12)
    at attempt (/home/softaction/apps_nodejs/node_modules/passport/lib/middleware/authenticate.js:361:16)
    at authenticate (/home/softaction/apps_nodejs/node_modules/passport/lib/middleware/authenticate.js:362:7)

我的数据库连接配置文件在项目的单独文件夹中。

例子:

-app
--models
---db.js
--controllers
---usuario-controller.js
--routes
---usuario-route.js

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    处理这个问题的常用方法似乎是使用pool of connections

    您可以在this post 中看到基于相同问题的示例。那里的一个答案显示了一种覆盖query 方法的方法,这样您就不需要用getConnection/release 重写每个调用。

    您可以使用本地数据库对此进行测试:

    • 启动数据库
    • 启动服务器
    • 尝试登录(或查询某些内容的模拟路由)
    • 确保它正常工作
    • 杀死/重启数据库
    • 再试一次路线
    • 确保您有同样的错误
    • 根据上面的链接实现解决方案
    • 再次测试并检查问题是否消失

    【讨论】:

    • 感谢@Stock Overflaw 的回复,我会进行测试并发布结果。
    • 效果很好,非常感谢您的帮助。我按照帖子说的做了,这些人是10年级
    【解决方案2】:

    我遇到了同样的问题,找到了this,对其进行了测试,并且成功了。这是一个名为 serverless-mysql 的 NPM 模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2017-11-21
      • 2019-06-19
      • 2012-02-21
      • 1970-01-01
      • 2022-11-11
      • 2016-11-26
      相关资源
      最近更新 更多