我应该如何编写带有服务器端和客户端代码的node.js Web应用程序?

时间:2012-01-09 03:29:46

标签: javascript node.js project-management backbone.js spine.js

我打算编写一个spine / backbone.js样式的web应用程序,它基本上只是将一个大的application.js文件传输到客户端的浏览器,该浏览器使用ajax与node.js后端进行通信。问题是我不知道如何构建这样一个项目,因为我从未见过这样一个应用程序的例子。我可以通过不同的方式来描绘一些利弊

  • 将所有内容保存在一个项目文件夹中。服务器端和客户端代码都驻留在相同的文件夹中,这意味着它们可以共享资源,例如表单输入验证和语言文件。这似乎是一个很好的解决方案,但我不知道如何只捆绑客户端需要的代码,而不是服务器代码。总的来说,我不知道如何做到这一点。如果之前已经完成,我想看一些示例代码,甚至可能是一个git repo

  • 创建两个单独的项目。一个用于客户端,一个用于服务器。这似乎更简单直接,但在共享资源方面却不那么优雅。我必须两次编写表单输入验证等代码。

有什么想法吗?

5 个答案:

答案 0 :(得分:3)

你的第一种情况是一个非常棘手的情况,我建议我们还没有到那里。有些人认为没有理由尝试到达那里,因为前端/后端总是会有轻微的,有时甚至是截然不同的任务。像derby这样的图书馆显示出了希望,但还没有完全存在。

我最近和一位朋友讨论了这个问题,我们得出的结论是,现在最好的选择可能是在websockets上序列化模型,然后确保节点服务器和客户端应用程序保持同步。

我可能会在这样的图书馆工作,但是现在我仍在开发两个文件夹和模型副本。布局标记从服务器发送,所有其他内容在从服务器接收JSON后呈现在客户端。坦率地说,重复的数量并不是那么重要。有点刺激,但也保持更大的灵活性,可以在不同的方向生长。

答案 1 :(得分:2)

有一篇好文章涵盖了这个主题:http://blog.nodejitsu.com/scaling-isomorphic-javascript-code

答案 2 :(得分:0)

这不是对您的问题的完整答案,但如果您选择进行此类努力,可能有帮助的一个图书馆可能是Browserify

它的设计使你可以使用类似的require()函数和预处理的,或者从模块源生成的动态,js文件包含许多不同的模块。这些模块可以通过相同的require()机制与服务器端共享。

我不知道在服务器端实现的Backbone明确是模型同步的服务器端计数器部分,这似乎是您正在寻找的第一个目标,让代码分享有意义,例如作为模型和验证,有用地共享。

另一件需要注意的是requirejs,它使用更传统的脚本标记异步加载f js模块,但也可以在node.js中工作,使相同的AMD模块在节点和客户端代码之间共享。

答案 3 :(得分:0)

需要实时吗?否则德比方法可能有点太重了。 Express.js提出了一个结构,其中客户端js在公共文件夹中分隔,并提供了运行快速RESTful API的方法,然后您可以使用application.js访问它。 我想你也可以通过eval()将“经典”js文件从public加载到节点中。

答案 4 :(得分:0)

现在事情已经发生了很大变化,例如

浏览器化影响编码可以帮助我们轻松实现这一目标

服务器端和客户端之间总会有一些不常见的代码,但目标应始终是将所有逻辑代码保存在不同的模块中(以后从两个环境中使用)。从TDD的角度来看,这也是更好的,也可以使你的键盘按键次数减少。

看看像这样的东西 - http://mindthecode.com/lets-build-an-angularjs-app-with-browserify-and-gulp/

说过你的选项1对我来说似乎不太方便,如果你有正确的编码器编码正确的代码。