首页 > 解决方案 > 每次路由页面时如何使用 res.render 发送数据?

问题描述

我之前发布了一个问题,但我发现我关注的是错误的问题,因为我认为我的问题出在数据库方面,但问题似乎出在“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 if 它不是第一次而不是 render 但它仍然不起作用......

非常感谢大家花时间帮助我,我真的很感激!

标签: javascriptmysqlnode.jsserverpug

解决方案


我还没有看到语法“ var data = !{JSON.stringify(data)} ”

我最熟悉的等价物是 var data = !(JSON.stringify(data))

或者,当您调用 nextItem(newData) 时,您可以尝试将数据传递给 nextItem()

看看有什么作用:

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

说?

当您发送 xhr.send() 时,也看不到 API 上发生的情况。尝试 console.log() api端的请求。对于发布请求。


推荐阅读