Как использовать res.render для отправки данных при каждом перенаправлении страницы? - PullRequest
0 голосов
/ 13 января 2020

Я опубликовал вопрос ранее, но вижу, что сосредоточился не на той проблеме, поскольку думал, что моя проблема была на стороне базы данных, но вместо этого проблема, похоже, связана с "res.render", так как он получает правильные данные из базы данных он просто не отправляется моему клиенту после первого звонка. Ранее я видел вопрос о переполнении стека, в котором говорилось, что вместо этого нужно отправить полный массив и выполнить итерации на стороне клиента, но это решение не будет работать для меня, потому что я гарантирую, что несколько человек могут использовать инструмент на в то же время именно поэтому я использую блокировку в своем запросе sql, чтобы гарантировать, что этот процесс выполняется по одному, а не реплицирует данные.

Вот мой код:

app.get('/', (req, res) => {
  connection.query("LOCK TABLE data.train_data WRITE; SELECT * FROM data.train_data LIMIT 1; DELETE FROM data.train_data LIMIT 1; UNLOCK TABLES;",(err,rows) => {
    if(err){
      console.log('Error selecting tweets from Database...');
      return;
    }
    console.log('Successfully received tweets from database');
     res.render('index', {
       title: 'Tweet Labeler',
       data: rows[1]
     });
  });

В блоке res.render у меня возникают проблемы, потому что в первый раз я знаю, что он правильно отправляет данные, но каждый раз после этого Кажется, не отправил это правильно. И я считаю, что это либо потому, что я использую это неправильно, либо что-то не так с моей функцией javascript ниже, где, возможно, мне нужно убедиться, что, как и данные, которые обновляются ... и, честно говоря, я не совсем уверен, как javascript знает, что JSON .stringify (data) относится к данным, отправляемым res.render? Так что, возможно, это также может быть проблемой:

          script.
            var data = !{JSON.stringify(data)};
            function nextItem() {
              data = !{JSON.stringify(data)};
              console.log("The new data is:");
              console.log(data[0]);
              if (data){
                //- document.getElementById("label").innerHTML= "Current Tweet ID: " + curIndex
                document.getElementById("tweetText").innerHTML = data[0].tweet
              }
             }
             function relClick(){
               var xhr = new XMLHttpRequest();
               var newData = {'tweet':data[0].tweet,'relevant':1};
               var jsonData = JSON.stringify(newData);
               xhr.open("POST","/",true);
               xhr.setRequestHeader('Content-type','application/json');
               xhr.send(jsonData);
               console.log("Clicked Relevant");
               xhr = new XMLHttpRequest();
               xhr.open("GET","/",true);
               xhr.send();
               nextItem();
             }
             function irrClick(){
               var xhr = new XMLHttpRequest();
               var newData = {'tweet':data[0].tweet,'relevant':0};
               var jsonData = JSON.stringify(newData);
               xhr.open("POST","/",true);
               xhr.setRequestHeader('Content-type','application/json');
               xhr.send(jsonData);
               console.log(jsonData);
               console.log("Clicked Irrelevant")
               nextItem();
             }
             rel.addEventListener('click',relClick);
             irr.addEventListener('click',irrClick);
             next.addEventListener('click', nextItem);

В основном я знаю, что это работает правильно, но что-то не так с данными, потому что в моей консоли, где я размещаю сервер, я печатаю результаты запрос, и он правильный, но когда я распечатываю их в консоли браузера, это одна и та же строка каждый раз с момента первоначального открытия страницы, поэтому я знаю, что она не обновляется. ПРИМЕЧАНИЕ * Я сделал это, используя PUG для шаблонов.

Я даже пытался использовать оператор if, чтобы использовать send, если это не первый раз вместо render, но он все еще не работает ...

Большое спасибо всем, кто принял время, чтобы помочь мне, я действительно ценю это!

1 Ответ

0 голосов
/ 14 января 2020

Я не видел синтаксис "var data =! {JSON .stringify (data)}" "

Мой самый знакомый эквивалент - var data =! (JSON .stringify (data) )

Или, может быть, вы можете попытаться передать данные в nextItem (), когда вызываете его nextItem (newData)

Посмотрите, что говорит:

var data = !{JSON.stringify(data)};
console.log(data)

? 1010 *

Также не видно, что происходит в API при отправке xhr.send (). Попробуйте console.log () запрос на стороне API. Для почтового запроса.

...