NodeJs - ошибка: не удается установить заголовки после их отправки & TypeError: req.next не является функцией - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь получить некоторые результаты из базы данных mysql. Я вызываю метод для вставки в базу данных и другой, чтобы прочитать то, что я вставил ранее.

Я делаю это, потому что node.js не работает синхронно. Это мой код:

exports.list = function(req, res){

  var moduleRows;

  req.getConnection(function(err,connection){
        var query = connection.query('SELECT * FROM questions WHERE module_id = ?',[X],function(err,rows)
        {
            for(var i = 0;i < rows.length;i++){
                moduleRows = rows[i];
                GetResults(moduleRows); 
            }
        });

        var GetResults = function(moduleRows) {
            var RightAnswer = 0;
            var WrongAnswer1 = 0;
            var query = connection.query("SELECT * FROM studentsanswers WHERE Question = '"+moduleRows.question+"' ",function(err,rows2)
            {
                    for(var ii = 0;ii < rows2.length;ii++){
                        if (rows2[ii].Answer == moduleRows.RightAnswer){
                            RightAnswer++;
                        }
                        else if (rows2[ii].Answer == moduleRows.WrongAnswer1){
                            WrongAnswer1++;
                        }
                    }
                var Data = {
                    question: moduleRows.question,
                    RightAnswer: moduleRows.RightAnswer,
                    WrongAnswer1: moduleRows.WrongAnswer1,
                    NumberOfRightAnswer: RightAnswer,
                    NumberOfWrongAnswer1 : WrongAnswer1
                };
                insertResults(Data);
                return;
            });
        }

        var insertResults = function(Data) {
            var query = connection.query("INSERT INTO statistics set ? ",Data, function(err, rows)
                {   
                    PrintResults();
                    return;
                });
        }

        var PrintResults = function() {
            var query = connection.query("SELECT * FROM statistics" ,function(err,rows)
            {
                res.render('StatisticsByModules',{page_title:"Questions - Node.js",data:rows});
                return;
            }); 
        }
    });

};

Я получаю ошибки: Ошибка: невозможно установить заголовки после их отправки. Ошибка типа: req.next не является функцией

1 Ответ

0 голосов
/ 03 сентября 2018

В следующем коде вы вызываете GetResults(moduleRows) несколько раз, что вызывает PrintResults Несколько раз. В вашем PrintResults методе вы отправляете res.render несколько раз, что вы не можете сделать для одного запроса. Сначала вам нужно будет составить список данных, а затем один раз вызвать req.render с запрашиваемыми данными.

var query = connection.query('SELECT * FROM questions WHERE module_id = ?', [X], function (err, rows) {
    for (var i = 0; i < rows.length; i++) { // <== HERE
        moduleRows = rows[i];
        GetResults(moduleRows);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...