【问题标题】:render page while making http request express在进行 http 请求时呈现页面
【发布时间】:2016-10-08 14:12:10
【问题描述】:

嗨,我是一个快速的菜鸟....我有一个 api 外观页面,这一切都在工作,但我想要的是,一旦用户点击路线,我将显示一个加载页面,然后启动api http 请求,然后一旦成功重定向/呈现结果页面。据我了解,您不能在同一条路线上使用 res.render 两次?也许我们的朋友 next();可以帮忙吗?

这是我目前所拥有的:

router.get('/lookup/post/:url', function(req, res){

  // Render the loading page...?
  res.render('loading');

  Lookup.post(req.params.url, function(err, result){
    if(err){

    }else{
      // ...Then once the api lookup comes back ok redirect or render the results page?
      res.render('results', {
        posts : result.store.postData.posts[0],
        votes : result.store.voteData
      });
    }
  });
});

【问题讨论】:

  • 你不能渲染页面,一次然后小夜曲它:) 删除`res.render('loading');`,你所拥有的是正确的,你就是这样做的.回调函数执行后显示页面????。
  • 谢谢大卫,当然,如果我删除 res.render('loading') 它工作正常......但我确实需要一个加载页面。那么我会渲染加载页面,然后转到 next() 中间件函数.. 就像 http 查找成功后渲染结果页面一样?
  • 我不认为您可以使用res.render() 完全从服务器完成那种页面 UI。您可以将 loading 从服务器移动到客户端,以便客户端显示加载 UI,然后在 POST 结果通过时替换该 UI。
  • 感谢 jfriend00 的反馈,是的,我可能会让服务器渲染显示加载器的页面,然后可能使用客户端对 api 进行 ajax 调用,成功后它可以隐藏加载器并填充页面......嗯,一如既往,煎鸡蛋的方法不止一种......
  • 对于任何想做类似事情的人。我通过使用 express 来呈现页面来实现这个工作,然后在页面加载时触发一个 ajax 调用到另一个传递它的 url 成功隐藏加载器并使用一些 jQuery 来填充页面上的一些 div。跨度>

标签: node.js express httprequest


【解决方案1】:

解决您的问题的方法是在 UI 中执行部分操作并在服务器上执行部分操作。您可以通过 Ajax 调用或使用 Socket.IO 来实现,这将创建到服务器的套接字连接。

我认为后者是最方便的解决方案,因为您可以通过发出和收听消息来与后端和前端对话。 Socket.IO 最酷的部分是,如果浏览器不支持套接字,它将默认使用 Ajax 调用。

Socket.IO的官网是:http://socket.io。您还可以查看我的bPhone 项目,我在该项目中以最简单的方式使用了 Socket.IO。另外我的代码有很多 cmets 应该让一切都超级清晰。

我希望这会让你走上正确的道路:)

【讨论】:

  • 嗨,大卫,感谢您的回复。是的,现在更清楚了。我让它与 Ajax 一起工作,但我没有考虑过 socket.io,我之前在 twitter 流 API 项目中使用过它,是的,优点是 ajax 后备!再次感谢伙计!
  • 不用担心,很高兴为您提供帮助。不要忘记给我的答案投票:)
猜你喜欢
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多