javascript - 每次路由页面时如何使用 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 但它仍然不起作用......
非常感谢大家花时间帮助我,我真的很感激!
解决方案
我还没有看到语法“ 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端的请求。对于发布请求。
推荐阅读
- python - 为什么 render_template 没有被表达?
- python - 如何使用“Python docx”在 word 文档的页脚中查找和替换文本
- operating-system - 为什么关闭管道的读取端会阻止剩余代码执行?
- angular - 在 Angular 中集成 PDFJS
- javascript - 我可以通过 js 获取 cookie 并通过 jsonp 或任何其他请求将其发送到不同域中的另一个 url 吗?
- jestjs - 从正在测试的组件外部访问 Context API
- c++ - 是否在 const 方法未定义行为中修改非 const 对象的非可变成员?
- java - 如何将 Web 服务响应写入 json 文件?
- python - 我有一个剪切图像的代码,但我希望它通过前向和后向映射在 x 和 y 轴上旋转。关于如何做到这一点的任何建议?
- corda - 以前的块详细信息如何进入corda