Приложение Node + Express возвращает PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR? - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь создать приложение с помощью Node и Express, вчера оно работало хорошо, до сегодняшнего дня я получил эту ошибку:

{
  code: "PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR",
  fatal: false
}

Google говорит, что я должен использовать createPool вместо createConnection, но я не знаю, как это сделать в моем случае. Вот мой код:

const express = require('express');
const cors = require('cors');
const mysql = require('mysql');
const app = express();

const SELECT_ALL_USERS_QUERY = 'SELECT * FROM `mySchema`.`myTable`;';
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'abcdefg',
    database: 'mySchema'
});

connection.connect(err => {
    if (err) {
        return err
    }
});

app.use(cors());

app.get('/', (req, res) => {
    res.send('go to /mySchema to see contents')
});

app.get('/myTable', (req, res) => {
    connection.query(SELECT_ALL_USERS_QUERY, (err, results) => {
        if (err) {
            return res.send(err)
        }
        else {
            return res.json({
                data: results
            })
        }
    })
});

app.listen(4000, () => {
    console.log('MySchema SQL server listening on PORT 4000');
});

Ответы [ 2 ]

1 голос
/ 12 июля 2020
var mysql = require('mysql');
var pool  = mysql.createPool({
    connectionLimit : 10,
    host: 'localhost',
    user: 'root',
    password: 'abcdefg',
    database: 'mySchema'
});

// for an example.....
pool.getConnection(function(err, connection) {
      if (err) throw err; // not connected!

app.get('/myTable', (req, res) => {
  // Use the connection
  connection.query('SELECT something FROM sometable', function (error, results, fields) {
    // When done with the connection, release it.
    connection.release();

    // Handle error after the release.
    if (error) throw error;

    // Don't use the connection here, it has been returned to the pool.
  });
});
});

Если вы хотите закрыть соединение и удалить его из пула, используйте вместо этого connection.destroy (). Пул создаст новое соединение, когда оно понадобится в следующий раз.

Соединения лениво создаются пулом. Если вы сконфигурируете пул, чтобы разрешить до 100 подключений, но когда-либо использовать только 5 одновременно, будет выполнено только 5 подключений. Соединения также циклически повторяются в стиле циклического перебора: соединения берутся из верхней части пула и возвращаются в нижнюю.

Когда предыдущее соединение извлекается из пула, на сервер отправляется пакет проверки связи проверьте, хорошее ли соединение.

вы можете перейти по этой ссылке: https://github.com/mysqljs/mysql#pooling -connections

0 голосов
/ 12 июля 2020

Чтобы помочь другим, я решил опубликовать полное решение, которое сработало для меня:

const express = require('express');
const cors = require('cors');
const mysql = require('mysql');
const app = express();

app.use(cors());

app.get('/', (req, res) => {
    res.send('go to /mySchema to see contents')
});

const SELECT_ALL_USERS_QUERY = 'SELECT * FROM `mySchema`.`myTable`;';

const pool = mysql.createPool({
    connectionLimit: 10,
    host: 'localhost',
    user: 'root',
    password: 'abcdefg',
    database: 'mySchema',
    debug: false
});

pool.getConnection((err, connection) => {
    if (err) throw err;
    app.get('/myTable', (req, res) => {
        connection.query(SELECT_ALL_USERS_QUERY, (err, results) => {
            if (err) {
                return res.send(err)
            }
            else {
                return res.json({
                    data: results
                })
            };
        });
        console.log(connection);
    });

});


app.listen(4000, () => {
    console.log('MySchema SQL server listening on PORT 4000');
});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...