Node.js проблема с отправкой данных mysql в таблицу HTML для синтаксического анализа

#javascript #jquery #html #node.js

#javascript #jquery #HTML #node.js

Вопрос:

Мне нужна помощь!

В настоящее время я пытаюсь создать файл узла, который отображает данные из mysql на HTML-странице со строкой поиска. Моя проблема в том, что в настоящее время, если я запускаю коды, ввожу что-то в строку поиска и нажимаю кнопку, иногда это работает, иногда нет. Иногда это срабатывает 5 раз подряд, после перезагрузки это, возможно, вообще ничего не показывает.

У меня есть следующие коды:

Мой node.js server.js файл:

 var http = require('http');
var fs = require('fs');
var mysql = require('mysql');
var url = require('url');
var qs = require('querystring');

var valami;

var connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "uzeno"
});

var data = [];

function connectToDb(){
  connection.connect(function(err){
    if (err){
      console.log('error: '   err.stack);
      return;
    }
    return console.log('Connected established!');
  });
}

var server = http.createServer(function(request,response){
    if (request.method == 'POST') {
        var body = '';

        request.on('data', function(data) {
            body  = data;
            valami = body;
            console.log("valami = "   valami);
            
        });

        request.on('end', function() {
            var post = qs.parse(body);
        });
        }   
      var path = url.parse(request.url).pathname;
      fs.readFile('./index.html', function(err, file) {  
        if(err) {   
            return;  
            }  
            response.writeHead(200, { 'Content-Type': 'text/html' });  
            response.end(file, "utf-8");  
        });
  if(request.method == "POST") {
  } else if (request.method == "GET") {
if (request.url == '/get-servers/'){
  connection.query('call kereses(?)', [valami], function(err,rows)    {
    if (err) {
      console.log(err);
      return
    }    
    for (i=0 ; i < rows.length ; i  ){
        var row = rows[i];
        for(q=0 ; q < row.length; q  ){
            var ro = row[q];    
            data[q] ='<p>'   ro.ID   '<td>'   ro.Sender   '<td>'   ro.Receiver  '<td>'   ro.Targy  '<td>'   ro.Tartalom  '<br>';
                
    }   
    var teszt = JSON.stringify(data);
    response.writeHead(200, {'Content-Type': 'text/html'});
    response.end(teszt);
    }       
  });
    }
  }  
}).listen(8002);
  

Мой html index.html файл:

 <html>
<head>
<title>Teszt</title>
<meta charset="UTF-8">
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<style> 
table#servers {
    border: 1px solid black;
    padding:0em 2em;
    border-collapse: collapse;
    
  }
    
tr {
    text-align: center;
    border-bottom: 1px solid black;
}

td {
    border: 1px solid black;
}

tr{
    border: 1px solid black;
}
</style>
<body>
<input type="text" id="valamiInput" />
<button id="valami">Keresés</button>
<p id="demo"></p>
  <table id="servers">
    <thead>
      <tr>
        <th width="75">ID</th>
        <th width="75">Sender</th>
        <th width="75">Receiver</th>
        <th width="150">Tárgy</th>
        <th width="150">Tartalom</th>
      </tr>
    </thead>
    <tbody>
    </tbody>
  </table>
  <div class="log"></div>
  <script type="text/javascript">
    jQuery(function($){
        $("#valami").click(function(){
            var x;
            var serverData = [];
            x = $("#valamiInput").val();
            $("#demo").text("Keresés a következőre: " x);

            var xhr = new XMLHttpRequest();
            xhr.open('POST', '/', true);
            xhr.send(x);
            $.get('/get-servers/', function(data) {
            var serverData = JSON.parse(data);
            var rows = serverData.length ;
          
                  for (i=0 ; i < rows ; i  ){
                    $('#servers tbody').append('<tr><td>' serverData[i]);
                  }
            });
        });
    });
  </script>
</body>
</html>
  

Я получаю следующую ошибку (вы можете видеть справа, что это иногда срабатывает):
ошибка
ЕСЛИ я выполняю отладку.регистрируйте данные после :

 var jqxhr = $.get('/get-servers/', function(data) {
  

затем, если это успешно, он показывает вещи, которые будут проанализированы в таблицах. Но если синтаксический анализ завершится неудачей, то в консоли будет показан полный код HTML-страницы. (как и все, от начального тега до тега

Заранее спасибо за предложения! (Также, извините за мой плохой английский)

Комментарии:

1. JSON то, что вы анализируете и что вызывает ошибку, было бы полезно при диагностике вашей проблемы. Вы должны быть в состоянии console.log(data) перед вызовом JSON.parse(data) .

2. Когда возникает ошибка, и она не запускается console.log (данные) возвращает то, что находится внутри html-файла. Показан код страницы с отверстиями.

Ответ №1:

Синтаксический анализ JSON не выполняется, вы могли бы начать с регистрации ответа сервера, прежде чем пытаться проанализировать его, чтобы увидеть, вызывает ли формат ответа какие-либо проблемы или возвращается значение null.

На Index.html ln 58 добавить:

  console.log(data);
  

Комментарии:

1. Журнал возвращает то, что находится внутри index.html файл. Я только что понял, что это, возможно, потому, что когда я загружаю index.html Я также использую response.end и, возможно, именно поэтому он показывает, что находится внутри этого HTML-файла.

2. Кроме того, по-видимому, вы отправляете два запроса, которые могут вызывать асинхронные проблемы.. Первым из них является запрос POST с использованием библиотеки XMLHttpRequest, а после этого вы используете запрос get jQuery.. Попробуйте использовать один POST-запрос, который отправляет входное значение, а также возвращает нужные данные в ответе.

Ответ №2:

Я бы предложил просто вернуть результирующий набор, поскольку вы, похоже, не выполняете никакой дополнительной фильтрации или логики

 //.....snip.....//
connection.query('call kereses(?)', [valami], function(err, rows) {
  if (err) {
    console.log(err);
    return
  }
  data = rows;
  var teszt = JSON.stringify(data);
  response.writeHead(200, {
    'Content-Type': 'application/json'
  });
  response.end(teszt);
});
//.....snip.....//  

а затем разрешить получателю обрабатывать json для целей отображения

 jQuery(function($) {
  $("#valami").click(function() {
    var x;
    //var serverData = [];
    x = $("#valamiInput").val();
    $("#demo").text("Keresés a következőre: "   x);

    $.get('/get-servers/', function(data) {
      var serverData = JSON.parse(data);
      var body = $('#servers tbody');
      body.empty(); //clean it out
      $.each(serverData, function(idx, elem) {
        body.append(
          $(`<tr><td>${elem.ID}</td><td>${elem.Sender}</td><td>${elem.Receiver}</td><td>${elem.Targy}</td><td>${elem.Tartalom}</td></tr>`));
      });
    });
  });
});