用户在页面上执行某些操作后,我使用ajax将一些数据发送到我的Node.js Express服务器。然后该服务器执行此操作:
router.post('/', function(req, res){
//user authentication then, inside that callback
res.redirect('/dashboard');
}
dashboard.js然后执行此操作:
router.get('/', function(req, res, next) {
console.log("dashboard"); //<--This code is running
res.render('index',{title:"You are logged in"});
}
现在前端正在这样做:
function httpGetAsync(theUrl, callback){
let user = document.getElementById('username').value;
let pass = document.getElementById('password').value;
let data = {
"username": user,
"password": pass
}
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
callback(xmlHttp.responseText);
}
xmlHttp.open("POST", theUrl, true); // true for asynchronous
xmlHttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
var dataAsJson = JSON.stringify(data);
xmlHttp.send(dataAsJson);
}
index.html登录我的浏览器控制台,而不是看到我的好“你登录了”页面。这显然是因为我的onclick听众这样做了:
onclick='httpGetAsync("/createUser", console.log)'
而不是console.log
(这显然是错误的),我该怎么称呼?
如何让dashboard.js中的res.render('index',{title:"You are logged in"})
实际呈现?
这很像ExpressJS : res.redirect() not working as expected?,但该问题不包括包含其前端代码的部分,这是我认为问题所在。最后一条评论写道:“不,从来没有弄清楚。我最后以不同方式构建我的应用程序,登录部分采用模态,而不是另一页......非常令人沮丧”。
答案 0 :(得分:1)
由于XHR
用于发送和恢复响应,您正在接收html页面作为状态为301或302的响应,可能的解决方案是将重定向url
作为响应发送
router.post('/', function(req, res){
//user authentication then, inside that callback
res.send('/dashboard');
}
并且在收到此回复后,您可以在回调中重定向到回复网址
function redirect(res){
window.location = res;
}
onclick='httpGetAsync("/createUser", redirect)'