Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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 Express.js如何使用response.render在客户端进行html呈现?_Javascript_Html_Express_Pug - Fatal编程技术网

Javascript Express.js如何使用response.render在客户端进行html呈现?

Javascript Express.js如何使用response.render在客户端进行html呈现?,javascript,html,express,pug,Javascript,Html,Express,Pug,我有一个基本的express js应用程序,路径如下: router.get('/', function(req, res){ res.render('login'); }); 它工作得很好——在登录到本地主机的主页之后,login.pug中的html在客户端得到了很好的呈现。但是,当我的应用程序运行时,有时我希望在客户端已经呈现html的情况下呈现另一个pug文件: app.get('/dashboard', function(req, res){ res.

我有一个基本的express js应用程序,路径如下:

router.get('/', function(req, res){
        res.render('login');
    });
它工作得很好——在登录到本地主机的主页之后,login.pug中的html在客户端得到了很好的呈现。但是,当我的应用程序运行时,有时我希望在客户端已经呈现html的情况下呈现另一个pug文件:

app.get('/dashboard', function(req, res){

    res.render('dashboard', {user: req.query.login});
});
但是,当get请求在
'dashboard'
路径上发送时,什么也不会发生。据我所知,之所以会发生这种情况,是因为
res.render
只是将
pug
文件解析为HTML,并将其作为普通字符串发送给客户端(我可以在浏览器开发人员工具中查看,当我检查AJAX响应时,我可以看到完全呈现的HTML)

现在我的问题是:有没有一种方法可以从res.render在客户端自动呈现HTML?所以,在服务器端,我只写
res.render('template')
,在客户端,页面被重新呈现,而不处理响应?

我知道我可以清除整个DOM并将收到的字符串追加到document.body中,我还知道我可以发出POST表单请求,然后页面将自动重新呈现,但我希望避免这两种解决方案(不要问为什么)


提前感谢您的帮助。

当您的Javascript发送Ajax请求时,来自该Ajax请求的响应将返回到您的Javascript。就这样。浏览器不显示任何内容。如果您想对该响应进行处理,那么Javascript有责任对其进行处理(将其插入页面以显示它,等等)

如果您真正想要的是浏览器实际转到
/dashboard
URL,然后显示该页面,那么您的Javascript可以执行以下操作:

window.location = '/dashboard';
这将告诉浏览器获取该URL的内容,它将向您的服务器发出请求,您的服务器将返回呈现的HTML,浏览器将在页面中显示该HTML,并在浏览器栏中将
/dashboard
显示为URL。你想做什么就做什么

所以,这完全取决于您的Javascript。为工作选择合适的工具。使用Ajax调用获取Javascript数据并在Javascript中处理结果,或者指示浏览器加载新页面。一个或另一个

但当get请求在“仪表板”路径上发送时,什么也不会发生。据我所知,之所以会发生这种情况,是因为res.render只是将pug文件解析为HTML,并将其作为纯字符串发送给客户端(我可以在浏览器开发人员工具中检查它,当我检查AJAX响应时,我会看到完全呈现的HTML)

是的,Ajax请求就是这样做的。它们从服务器获取内容并将数据返回到Javascript(并且仅返回到Javascript)

有没有一种方法可以在客户端自动从res.render呈现HTML

是,使用
window.location='/dashboard'来自Javascript

所以在服务器端我只写res.render('template'),在客户端页面被重新呈现而不处理响应


不是来自ajax调用。Ajax调用从不自动显示内容。从未。Ajax调用是将数据返回到脚本的编程请求。这就是他们。但是,在Javascript中,您可以通过将
window.location
设置为新URL,自动显示内容

这并不能真正解决我的问题。我想实现用户会话,我需要从服务器端重定向。例如,如果会话过期,在express top中间件中,我将调用res.redirect('/login'),它将调用res.render('login')。这一切都发生在服务器端,客户机不知道这一点。若我只是操纵DOM/窗口位置,那个么在对服务器的每次ajax调用中,我都应该检查会话是否仍然有效?这真的不能用其他方式处理吗?@Furman-当你的问题没有真正说明你要解决的真正问题时,这里有点让人痛苦。我回答了你最初的问题。Ajax调用永远不会自己在浏览器中呈现。如果你想拼出一个完全不同的问题,那么请用一个新问题拼出来。但是,您不能要求Ajax调用去做它从未设计过的事情。服务器对Ajax调用的响应本身不会影响浏览器显示或URL。为此,它需要协同Javascript在浏览器中处理Ajax响应。@Furman-FYI,只需几行客户端Javascript代码即可处理来自Ajax调用的JSON响应,并查看服务器是否指示客户端Javascript设置
window.location=someurlinterresponse
(如果您选择实现)。@Furman-并且,不,您不检查会话身份验证客户端。这是一个服务器端功能—始终如此。您在这里暴露了大约10%的总体问题,因此我们无法在现有数据上提供进一步帮助。这个问题已经回答了。请开始一个新的问题,其中包括对您试图解决的整个问题的更详细的描述,然后我们也许可以帮助您确定应该如何设计。您是对的,我在问题中没有阐明我的真正目标,这可能是误导。我想避免检查会话(我的意思是,如果客户端由于非活动会话而重定向,则检查ajax响应),但现在我明白了这是不可能的。这仍然有点痛苦,因为我需要在每个ajax请求中检查活动会话的ajax响应。还是要感谢你的帮助和时间。