【发布时间】:2020-02-12 17:08:50
【问题描述】:
我需要显示在 get 中使用 res.render() 渲染视图后发布的数据。当我使用 时,我的视图会抛出一个错误,指出日期未定义,我知道会发生这种情况,因为在渲染视图之前我的值不存在,并且在之后设置它。那么如何设置此变量以显示在我的 ejs 文件中在我的视图渲染之前或之后?
我尝试了一些方法,例如使用 res.send(),在我的 post() 中使用另一个 get(),甚至创建了一个局部视图,但没有任何效果。 我不想点击任何按钮来做到这一点,如果它只有点击好的话。我知道你不能在同一个视图上使用 res.send() 两次。
当页面在 javascript 中加载以设置我的日期变量并将其发送到我的 node.js 文件时,我的 post XMLHttpRequest 被执行,然后我使用 express 来获取它。我的 node.js 代码如下:
app.get('/', function (req, res) {
res.render('index', {
time: time,
views: visitors,
mobileViews: mobileVisitors,
});
}
app.post('/', function(req, res){
console.log('working');
getInfo = req.body;
console.log(getInfo);
//getInfo.date = 1
res.render('index', {dataTest: getInfo.date}); //this doesnt work
//OR res.send({dataTest: getInfo.date}); doesnt work
//OR app.get('/', function (req, res) {res.render ... doesnt work
}
我的 ejs 视图是:
<h1 class="test">test <%= dataTest %></h1>
我的js文件:
var waitForEl = function (selector, callback) {
if (jQuery(selector).length) {
callback();
} else {
setTimeout(function () {
waitForEl(selector, callback);
}, 100);
}
};
waitForEl(".daterangepicker", function () {
var element = document.querySelector('.ranges ul').childNodes[0].childNodes[0].data.toString();
console.log(element);
var date = 0;
date = sendData(date, element);
var obj = JSON.stringify({date: date});
console.log(obj);
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://localhost:4000", true);
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.send(obj);
});
function sendData(date, element) {
if(element == 'Today') {
date = 1;
}
return date;
}
【问题讨论】:
-
让我直截了当地说,您正在使用向
app.post("/", handler)发送post请求的Ajax 请求,并且您希望使用刚刚提交的数据呈现索引模板? -
@goto1 是的,我正在使用 Ajax 发布请求将我的日期变量发送到 app.post("/", handler) 并使用 req.body 获取值。我需要在渲染我的视图之前或之后在我的视图中看到该值(getInfo.date),如果可能的话,无需单击
-
这在您当前的方法中是不可能的。如果您想使用您使用
Ajax提交的一些数据来呈现index模板,您需要将此信息保存在会话和/或数据库中。
标签: javascript node.js express xmlhttprequest ejs