Необработанное предупреждение об отказе: Ошибка: Не удается поставить в очередь рукопожатие после того, как оно уже было поставлено в очередь на рукопожатие

#javascript #node.js

Вопрос:

Я пытаюсь создать node.js сервер, который будет обрабатывать запрос POST, содержащий данные в двух разных таблицах MySQL.

Вот код, стоящий за моим node.js сервер.

 let mysql = require("mysql");
const http = require('http');

http.createServer(async function(req, res) {

    let con = mysql.createConnection({
        host: "...",
        user: "...",
        password: "...",
        database: "..."
    });

    res.writeHead(200, {
        "Content-Type": "application/json",
        "Access-Control-Allow-Origin": "*"
    });

    if (req.method == 'POST') {

        let body = '';
        req.on('data', function(data) {
            body  = data.toString();
            if (body.length > 10000000) {
                http.request.connection.destroy();
            }
        });

        req.on('end', () => {
            if (body) {
                let item = JSON.parse(body);  
             
                addQuestion(con, item.title).then(function(result){
                    con.end();

                    addOptions(con, result.insertId, item.options).then(function(data){
                        con.end();

                        res.end(JSON.stringify({
                            message: "Saved!"
                        }));
                    });
                    
                });
            }
        });

        return;
    } 
    
    res.end(JSON.stringify({
        message: "OK!"
    }));

}).listen(80);

function addQuestion(con, title) {
    return new Promise((resolve, reject) => {

        con.connect(function(err) {
            if (err) return reject(err);
    
            let sql = "INSERT INTO _questions SET ?";

            con.query(sql, {title: title}, function(err, result, fields) {
                if (err) return reject(err);
                return resolve(result);
            });

        });
    });
}

function addOptions(con, questionId, options) {

    return new Promise((resolve, reject) => {
        con.connect(function(err) {
            if (err) return reject(err);
    
            let values = [];

            for(let x = 0 ; x < options.length; x  ){
                let option = options[x];
                values.push({
                    title: option.title, 
                    is_correct: option.isCorrect, 
                    question_id: questionId
                });
            }
            let optionsSql = "INSERT INTO _options (title, is_correct, question_id) VALUES ?";
            con.query(questionSql, values, function(err, requestData) {
                if (err) return reject(err);

                return resolve(result);
            });
        });
    });
}

 

Я получаю следующую ошибку

Необработанное предупреждение об отказе: Ошибка: Не удается поставить в очередь рукопожатие после того, как оно уже было поставлено в очередь.

Как я могу решить эту проблему?

Ответ №1:

**Если вы используете модуль node-MySQL, просто удалите .connect и .end. Просто решил проблему сам.

**