在express中,如何做到每秒re-render一次jade模板?
发布于 10 年前 作者 ChopperLee2011 4663 次浏览 最后一次编辑是 8 年前 来自 问答

app.js代码片段如下:

>  app.get('/', function(req, res) {
>		var mytime = 0 + 1;
> 		res.render('home', {time : mytime});
> }

需要做到每秒更新一次time在页面上,我的想法是用setInterval:

>  app.get('/', function(req, res) {
>		function add() {
>			var mytime = 0 + 1;
> 			res.render('home', {time : mytime});
>		}
>		setInterval(add,1000);
> }

但是发现不会重新render view,有谁知道如何动态的render view吗?

12 回复

这个更适合在客户端JavaScript代码中实现。

直接在浏览器上面更新时间啊。。。。。。

前端 data binding,自动更新

楼主的瓜太辣~

代码写的竟然让我 无 言 以 对。。

@bnuhero 大家也只推荐前端做这个功能,那我也只能作罢了

@xiaojue 虽然没有记时,但是重点是要重刷view啊,好吧我没太注意

可以做到,可以让用户摁 Alt + R,当频率达到 1000ms 的时候就实现了楼主的需求了。

或者还有一个办法,在前端写 setInterval(add,1000);, 但是这个 add 得写成 ajax 请求,请求完了之后通过前端的方式渲染出来。

@ChopperLee2011 没有,我就是无言以对么。。

我正经回答一下,你这个代码的需求,用@think2011的第二个办法,可以实现,就是在view页面中使用前端js,ajax请求一个接口,拿你的server time,再更新dom元素。

html输出后是不能被修改的。。。除非你刷新页面。。

刷新页面的方法很多种,比如这个 <meta http-equiv=“refresh” content=“5”>

再比如setInterval 然后localtion.reload() 等等。。

又或者你把更新time这里做成一个iframe,其实就是页面不刷新,更新局部html的问题么,对吧。。

如果你要在controller里不断的让view主动更新数据,又不想轮询,可以考虑长连接comet技术或者socket.io来实现。

@xiaojue 确实前端刷新很方便,必须后台做的话用socket.io去发事件给前端也可以做,多谢你的解答。

回到顶部