node.js和单页Web应用程序

雷扎

我正在寻找后端的express.js和客户端的JS。我的应用程序是单页Web应用程序。

该服务器将仅提供JSON消息,我的问题是有关“路由”以进行快递。是否应该使用路由来连接UI和服务器端业务逻辑?那如何与我的单页应用程序一起使用?

可以这么说,客户端对服务器进行Ajax调用以在数据库中查找值,并且有服务器端脚本将JSON提供回UI。UI和节点脚本关系如何设置?

有人可以阐明这一点吗?

瑞安

单页应用程序是指驻留在单个HTML文档上的应用程序。这意味着,如果要根据应用程序的状态向用户显示一些不同的内容,则需要进行一些DOM操作(用不同的HTML剪切并替换当前文档的某些元素)以进行更新用户看到的“视图”。如果您觉得这很对不起,请不要冒犯。我想我将从这里开始。和我呆在一起,我将解释(或多或少)您的路由情况如何发生。

URL由几个不同的部分组成,每个部分都通知浏览器特定的信息位,以便下载用户尝试访问的资源。通常,您正在寻找的资源不在某处的服务器上,并且浏览器知道这一点是因为URL中的部分(例如“协议”(“ http:”)和“主机”(“ www.mydomain.com”)),因此它会转到该服务器以查找您的请求。URL中还有“查询”参数,这些参数可向服务器提供有关特定操作的一些附加信息,例如搜索查询的搜索字词。在查询参数之后,是“哈希”。哈希是单页应用程序发生魔术的地方...嗯,好吧.....

首先介绍一下哈希。当您在URL中添加“#”时,浏览器随后会将其后的信息解释为当前显示的文档中的某个位置(元素)。这意味着,如果您具有一个'id'为'main'的元素,并且将'#main'添加到URL的末尾,例如:'http://www.example.com#main',则浏览器将“滚动”(通常是“跳转”)到该元素的开头,以便您可以看到它。但是请注意,如果您键入“ http://www.example.com/#main ”(哈希与URL以斜杠分隔),则会强制重新加载整个页面,浏览器将尝试查找服务器上名称为“ #main”的文件(我敢打赌找不到)。

这里的要点是,如果URL中存在哈希,浏览器将不会尝试导航到当前文档,但上面提到的情况当然是例外,这很好,因为单页应用程序不想从页面导航或从服务器请求新文档。(看看单页应用程序的路由有何不同?)

现在,关于散列的全部内容对于单页应用程序来说并不重要,因为您无需处理所有内容就可以创建一个。您真正需要的就是一堆单击处理程序和DOM操作...但是,这意味着用户将无法共享应用程序中特定视图的链接。该URL将永远不会更改,并且我们将永远无法直接导航到任何特定视图。我们将始终从您应用的起始位置开始,这很容易会令人讨厌。

如果您的单页应用程序将具有不同的视图,并且您希望用户能够通过书签或链接直接导航到特定视图,则除了前端应用程序之外,您还需要在前端实施某种形式的路由您将需要在后端上实现的路由(数据API等的路由),这意味着您将需要使用哈希。

我不想研究不同的框架如何在前端完成路由,但这基本上是在用户单击链接时更新浏览器的地址字段,并查看地址栏以确定当前URL是什么的问题,将与该URL关联的HTML加载到文档树中指定位置的DOM中。

因此,在单页应用程序中,您在服务器上有一条路由来处理呈现应用程序HTML文档(index.html),并且有一些路由来负责处理应用程序的数据(在Windows中创建新实例)。数据库,登录和注销,编辑或销毁数据库中的实例,以及获取数据...),这些都是通过AJAX请求调用的。

实际上,这是一个相当复杂的情况,HTML5允许我们放弃哈希(借助于服务器上的某些链接重写),还能够像使用“返回”按钮和“前进”按钮一样使用“返回”按钮实际上已经离开了原始文档(我们之所以没有这样做,是因为我们仅将浏览器指向完全相同的URL,仅使用经过修改的哈希值,因此没有新的页面加载发生)。传统的网站导航和链接可以通过使用浏览器的History API来实现,该API从IE 10开始就可以用于IE(我相信),其余的大型浏览器供应商早就使用了它,因此可以利用这些框架这项技术将允许您的用户浏览您的应用,而无需在URL中添加哈希。

应该使用AJAX从服务器请求JSON。AJAX请求将始终命中您的服务器,因为您没有在AJAX请求中包含哈希符号(这样做很可笑,因为哈希仅用于文档内浏览),因此服务器端路由必须负责公开您的数据API(考虑RESTful)。尽管这不是他们在单页应用程序中的唯一目的,但这也许是他们最重要的目的。

总结一下,您将有两组路线。一个在客户端(作为AngularJS或EmberJS这样的客户端框架的一部分,该列表继续出现……我更喜欢Angular,但是该学习曲线相当陡峭。),另一个在服务器上。当您考虑“服务器路由”时,请考虑数据API。当您想到“页面路由”时,请记住,所有这些操作都是由您在初始服务器响应中附带的javascript在客户端上处理的(这是向浏览器呈现HTML所涉及的唯一且唯一必要的服务器端路由,加载您的“ index.html”以及所有必要的脚本和样式表等)。您将使用express.static中间件来提供静态文件,因此您不必担心为这些东西分配路由。

编辑快速介绍AJAX实现。在服务器上,您将拥有与Alex所提供的示例类似的路由,并且将使用您的框架或所选库公开的XMLHttpRequest(XHR)对象从客户端对这些URL进行调用。现在,对于框架/库来说,将这些请求作为Promises来实现或多或少是标准和最佳实践,网址http://wiki.commonjs.org/wiki/Promises/A您应该自己阅读一些有关它的内容,但是我可以通过说它是一个异步操作来总结一下它,它类似于同步操作中的“尝试,捕捉,抛出”。您将实例化一个Promise对象,并通过它尝试通过GET请求从服务器加载数据。确保已分配功能来处理对发出请求的URL的请求(服务器端路由)!您实例化并随后通过服务器向服务器发出请求的该对象承诺,一旦请求从服务器返回,该请求的结果将返回给您(无论是否成功)。如果成功,它将调用您编写的函数,并将向其提供来自服务器的数据。如果失败,它将调用其他函数,

希望能帮助回答您的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在单页 Web 应用程序中处理 node.js 中的“发布”请求

来自分类Dev

使用websockets和node.js的Web应用程序

来自分类Dev

使用websockets和node.js的Web应用程序

来自分类Dev

在服务器端使用node.js + express.js在SPA(单页应用程序)中动态生成内容的SEO

来自分类常见问题

如何打包和部署Node.js + express Web应用程序?

来自分类Dev

Node.js Web和移动应用程序-在哪里读取Excel文件?

来自分类Dev

适用于Web和移动应用程序的Node.js服务器

来自分类Dev

用于 Node.js Web 应用程序的 EC2 安全组和 SSL

来自分类Dev

Realm-js 和 Node Js:应用程序冻结

来自分类Dev

延迟的工作node.js Web应用程序

来自分类Dev

带有Node.js的静态Web应用程序?

来自分类Dev

如何构建Web应用程序node.js

来自分类Dev

延迟的工作node.js Web应用程序

来自分类Dev

Node.js 多个 Web 应用程序

来自分类Dev

Node.js应用程序和Drupal Nginx冲突

来自分类Dev

如何同步Node js应用程序,git和Heroku?

来自分类Dev

Node.js 架构和应用程序结构

来自分类Dev

单页Web应用程序问题

来自分类Dev

移动应用程序安全性,Bluemix和Node.js应用程序

来自分类Dev

.htaccess 在 Ubuntu 16.04 和 Apache Web Server 和 Node.js 应用程序中不起作用

来自分类Dev

单页应用程序和Web应用程序之间的区别。

来自分类Dev

如何在使用node.js和vanilla javascript制作的Web应用程序中使用代理?

来自分类Dev

如何使用Node.js和NPM创建Web客户端应用程序(如angularjs教程)

来自分类Dev

将Node.js和Node.js应用程序部署到Raspberry Pi

来自分类Dev

保持Node JS应用程序运行

来自分类Dev

如何分发Node JS应用程序?

来自分类Dev

如何使用Visual Studio 2013和Node Tools NTVS调试Node.js应用程序

来自分类Dev

维护 Node.js 应用程序的应用程序主机名和端口的最佳方法

来自分类Dev

带有屏幕(注册之前和之后)的单页Web应用程序开发的最佳方法

Related 相关文章

  1. 1

    如何在单页 Web 应用程序中处理 node.js 中的“发布”请求

  2. 2

    使用websockets和node.js的Web应用程序

  3. 3

    使用websockets和node.js的Web应用程序

  4. 4

    在服务器端使用node.js + express.js在SPA(单页应用程序)中动态生成内容的SEO

  5. 5

    如何打包和部署Node.js + express Web应用程序?

  6. 6

    Node.js Web和移动应用程序-在哪里读取Excel文件?

  7. 7

    适用于Web和移动应用程序的Node.js服务器

  8. 8

    用于 Node.js Web 应用程序的 EC2 安全组和 SSL

  9. 9

    Realm-js 和 Node Js:应用程序冻结

  10. 10

    延迟的工作node.js Web应用程序

  11. 11

    带有Node.js的静态Web应用程序?

  12. 12

    如何构建Web应用程序node.js

  13. 13

    延迟的工作node.js Web应用程序

  14. 14

    Node.js 多个 Web 应用程序

  15. 15

    Node.js应用程序和Drupal Nginx冲突

  16. 16

    如何同步Node js应用程序,git和Heroku?

  17. 17

    Node.js 架构和应用程序结构

  18. 18

    单页Web应用程序问题

  19. 19

    移动应用程序安全性,Bluemix和Node.js应用程序

  20. 20

    .htaccess 在 Ubuntu 16.04 和 Apache Web Server 和 Node.js 应用程序中不起作用

  21. 21

    单页应用程序和Web应用程序之间的区别。

  22. 22

    如何在使用node.js和vanilla javascript制作的Web应用程序中使用代理?

  23. 23

    如何使用Node.js和NPM创建Web客户端应用程序(如angularjs教程)

  24. 24

    将Node.js和Node.js应用程序部署到Raspberry Pi

  25. 25

    保持Node JS应用程序运行

  26. 26

    如何分发Node JS应用程序?

  27. 27

    如何使用Visual Studio 2013和Node Tools NTVS调试Node.js应用程序

  28. 28

    维护 Node.js 应用程序的应用程序主机名和端口的最佳方法

  29. 29

    带有屏幕(注册之前和之后)的单页Web应用程序开发的最佳方法

热门标签

归档