0

I am just beginning to learn using Backbone.js. Previously I have used a web framework built on top of Node.js to handle all the routes and responses. With Backbone is the possibility of a SPA (single page application).

I believe my question is related to this one: Account for Backbone.js pushState routes with node.js express server? (a question of express.js + backbone).

In which the code is given:

app.get('/', function(req, res) {
    // Trigger the routes 'domain.com' and 'domain.com/#/about'
    // Here render the base of your application
});

app.get('/about', function (req, res) {
    // Trigger the toure 'domain.com/about'
    // Here use templates to generate the right view and render
});

From using node web frameworks I have usually not used json requests to get data, but have queried the database in the route closure. Is the job of node.js (in a node+backbone environment) simply to serve up the backbone page and not query the database? So it simply directs clients to the specified backbone.js template without passing any data, and backbone takes over?

So if I wanted to display all book models (example.com/books) for instance, would I just send the user via node to that url, and backbone will take care of querying the database (with the model, of course)? What would that code look like?

Most of the backbone tutorials I've seen have dealt with external api's. Thanks!

4

1 回答 1

0

所以对于单页应用,我们需要考虑两种类型的页面:整页加载和单页路由。完整页面加载是用户首次到达您的站点时的入口点,但您还应该考虑到站点内的 URI 的深度链接以及当前 URI 的浏览器刷新。

简单的方法

  • 不要在你的 node.js 路由中查询数据库
  • 总是返回“起始页”HTML
  • 在浏览器中,主干路由器将初始化您的视图/集合/模型,然后fetch您需要从服务器获取数据并在浏览器中呈现页面。

首先让它工作并了解细节,因为总的来说它是最不复杂的。它确实会导致感知性能延迟,因为在第二次往返服务器以加载数据完成之前,该页面将无法使用。此外,起始页 HTML 可能没有用于 SEO 的有趣搜索引擎爬虫数据这一事实可能对您来说是一个重要因素(或不是)。

服务器端引导程序

因此,Jeremy Ashkenas 的官方指导是,对于整页加载,服务器应该:

  • 根据路由和任何请求参数查询数据库
  • 为该页面生成完整的 HTML 文档,包括呈现的视图
  • 将必要的数据作为 JSON 嵌入 HTML 文档中,并在主干应用程序加载到客户端时使用它来引导主干模型
    • 一些如何将引导的主干对象连接到 DOM(这留给读者作为练习)

这里的主要优势是感知性能,但这也有助于 SEO(这对您来说可能很重要,也可能无关紧要)。但是,这意味着存在一个相当复杂的框架,使您能够在 node.js 和浏览器中呈现相同的 HTML,而骨干网本身并不提供。有一个名为rendr的项目实现了跨浏览器和节点的统一 HTML 渲染的概念,您可以考虑使用或至少研究源以获得灵感。

于 2013-05-14T14:49:31.603 回答