Jade/Node.js:从Tumblr加载帖子时显示加载消息

Jade/Node.js:从Tumblr加载帖子时显示加载消息,node.js,tumblr,pug,Node.js,Tumblr,Pug,我有一个Node.js应用程序,可以从Tumblr加载帖子,然后显示它们。 当服务器收到客户机的请求时,服务器从Tumblr获取最后5篇文章并将其传递给Jade,Jade呈现模板并转换为HTML,然后将整个内容传递给客户机 当然,由于从Tumblr加载posts是异步的,所以当客户端第一次访问页面时,posts对象将为空(因为请求是在从Tumblr接收posts之前呈现和发送的)。但是,刷新页面后,posts对象不再为空,页面将填充来自Tumblr的帖子 现在,就像任何一个像样的网页一样,如果传

我有一个Node.js应用程序,可以从Tumblr加载帖子,然后显示它们。
当服务器收到客户机的请求时,服务器从Tumblr获取最后5篇文章并将其传递给Jade,Jade呈现模板并转换为HTML,然后将整个内容传递给客户机

当然,由于从Tumblr加载posts是异步的,所以当客户端第一次访问页面时,posts对象将为空(因为请求是在从Tumblr接收posts之前呈现和发送的)。但是,刷新页面后,posts对象不再为空,页面将填充来自Tumblr的帖子

现在,就像任何一个像样的网页一样,如果传递的posts对象为null或空,我的页面会显示“从Tumblr加载posts”。但是,由于post抓取方法的异步性质,它确实需要页面刷新来查看post。但是我想避免使用JavaScript刷新页面,那么如何动态加载页面,在从Tumblr检索时显示“从Tumblr加载帖子”,然后在不刷新的情况下更新页面

下面是一些相关的代码片段

后获取程序方法:

function getPosts() {
    var self = this;
    var posts = {};
    blog.text({limit: 5}, function(error, response) {
        if (error) {
           throw new Error(error);
        }

        self.posts = response.posts;
    });

    if (main.debug) console.log(posts);
    return this.posts;
}
请求处理程序:

app.get('/', function(req, res) {
    res.render('index', {
        title: "My Site",
        posts: getPosts()
    });
});
显示立柱的Jade block扩展插件:

if posts == null
  .postContainer#nullPosts
    h1 Still loading!
    p
      | You caught us at a bad time: we're still loading posts from
      | Tumblr. Try refreshing the page in a few seconds.
    p#emote Sorry! (>u///u<)
else
  for post in posts
    .postContainer
      h1
        a(title='View on Tumblr', target='_blank', href='#{post.post_url}')
          if post.title == ""
            = post.timestamp
          else
            = post.title
      p !{post.body}
      p.tags
        for tag in post.tags
          = "#" + tag + " "
if posts==null
.postContainer#nullPosts
h1仍在加载!
P
|你抓住我们的时机不好:我们仍在从
|Tumblr。尝试在几秒钟内刷新页面。

抱歉!(>u///uSocket.IO可能会帮到你。打开Socket连接并通过它们发送图像。Socket会在一段时间后轮询服务器。在Socket没有任何数据之前,你可以通过显示消息从客户端处理这些数据

第二种选择是从客户端发出ajaxget调用,直到调用完成为止,显示加载图像并在成功块中删除加载图像