Express.js如何使用response.render在客户端进行html渲染?

时间:2017-12-17 00:15:46

标签: javascript html express pug

我有以下路线的基本快递js申请:

router.get('/', function(req, res){
        res.render('login');
    });

它工作正常 - 在我的localhost上登录主页后,从login.pug的html很好地在客户端呈现。但是,当我的应用程序运行时,有时我想渲染另一个pug文件,当客户端已经有html呈现时:

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

    res.render('dashboard', {user: req.query.login});
});

但是当在'dashboard'路径上发送get请求时,没有任何反应。据我所知,这是因为res.render只是将pug文件解析为HTML并将其作为普通字符串发送到客户端(我可以在浏览器开发工具中查看,当我检查AJAX响应时,我看到完全呈现的HTML )。

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

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

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

当您的Javascript发送Ajax请求时,来自该Ajax请求的响应将返回到您的Javascript。而已。浏览器没有显示任何内容。如果你想对这个回复做一些事情,那么你的Javascript就有责任用它做一些事情(在页面中插入它以显示它等等)。

如果您真正想要的是您希望浏览器实际转到/dashboard网址然后显示该页面,那么您的Javascript就可以:

window.location = '/dashboard';

这将告诉浏览器获取该URL的内容,它将向您的服务器发出请求,您的服务器将返回呈现的HTML,浏览器将在页面中显示它并显示/dashboard作为浏览器栏中的URL。那应该做你想做的一切。

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

  

但是当获取请求发送到了'boardboard'路径时,没有任何反应。据我所知,这是因为res.render只是将pug文件解析为HTML并将其作为普通字符串发送到客户端(我可以在浏览器开发工具中查看,当我检查AJAX响应时,我看到完全呈现的HTML)。

是的,Ajax请求的作用。他们从服务器获取内容并将数据返回给您的Javascript(并且仅返回到您的Javascript)。

  

有没有办法在客户端自动从res.render呈现HTML?

是的,请使用您的Javascript中的window.location = '/dashboard';

  

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

不是来自ajax电话。 Ajax调用永远不会自动显示内容。决不。 Ajax调用是将数据返回到脚本的编程请求。这就是他们的本意。但是,从Javascript开始,您可以通过将window.location设置为新网址来自动显示内容。