Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用res.render在每次将页面路由到时发送数据?_Javascript_Mysql_Node.js_Server_Pug - Fatal编程技术网

Javascript 如何使用res.render在每次将页面路由到时发送数据?

Javascript 如何使用res.render在每次将页面路由到时发送数据?,javascript,mysql,node.js,server,pug,Javascript,Mysql,Node.js,Server,Pug,我之前发布了一个问题,但我发现我把注意力放在了错误的问题上,因为我认为我的问题出在数据库方面,但问题似乎出在“res.render”上,因为它正在从数据库获取正确的数据,只是在第一次调用后没有发送到我的前端。我之前在stack overflow上看到过一个问题,说要绕过这个问题,可以发送一个完整的数组,然后在客户端进行迭代,但是这个解决方案对我来说不起作用,因为我要确保多个人可以同时使用这个工具,这就是为什么我在sql查询中使用锁来确保这个过程正在进行一次完成一个,不复制数据 这是我的密码: a

我之前发布了一个问题,但我发现我把注意力放在了错误的问题上,因为我认为我的问题出在数据库方面,但问题似乎出在“res.render”上,因为它正在从数据库获取正确的数据,只是在第一次调用后没有发送到我的前端。我之前在stack overflow上看到过一个问题,说要绕过这个问题,可以发送一个完整的数组,然后在客户端进行迭代,但是这个解决方案对我来说不起作用,因为我要确保多个人可以同时使用这个工具,这就是为什么我在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);

基本上我知道它工作正常,但数据有点问题,因为在我托管服务器的控制台中,我正在打印查询结果,这是正确的,但当我在浏览器控制台中打印查询结果时,从页面最初打开时起,每次都是同一行,所以我知道没有更新。注意*我是用帕格做模板的

我甚至尝试使用if语句来使用send if,如果它不是第一次而不是render,那么它仍然不起作用

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

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

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

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

看看什么是:

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

说什么


此外,当您发送xhr.send()时,API上发生的事情也不可见。尝试在api端对请求执行console.log()。对于post请求。

该语法用于pug,基本上让它知道您使用的是服务器端变量名,我想是吧?我无法访问前端任何内容中的“新数据”。。。所以现在还不能解决这个问题