我应该如何去写一个node.js Web应用程序与服务器和客户端代码?

我正在计划编写一个spine / backbone.js风格的Web应用程序,它基本上只是将一个大的application.js文件传输到客户端的浏览器,该浏览器使用ajax与node.js后端进行通信。 问题是我不知道如何构build这样的项目,因为我从来没有见过这样的应用程序的例子。 我可以用不同的方式来描述一些优点和缺点

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

  • 创build两个单独的项目。 一个用于客户端,另一个用于服务器。 这似乎更简单直接,但在共享资源方面却不尽如人意。 我将不得不编写两次表单inputvalidation等代码。

有什么想法吗?

你的第一个情况是一个非常棘手的情况,我会build议,我们还没有到那里。 有些人会说,没有什么理由要去那里,因为前端/后端将总是承担一点点,有时甚至完全不同的任务。 像德比这样的图书馆显示出了希望,但还没有到现在。

我最近和一位朋友讨论过这个问题,我们得出的结论是,现在最好的办法就是通过websockets对模型进行序列化,然后确保节点服务器和客户端应用保持同步。

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

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

这不会是你的问题的完整答案,但是如果你select追求这样的努力,一个图书馆可能会有所帮助,可能是Browserify 。

它的devise使您可以使用一个类似的require()函数进行预处理,或者通过模块源生成的包含许多不同模块的js文件。 这些模块可以通过相同的require()机制与服务器端共享。

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

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

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

事情现在已经有了很大的进展,而事情也是如此

browserify受影响的编码可以帮助我们轻松实现这一点

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

看看这个堆栈 – http://mindthecode.com/lets-build-an-angularjs-app-with-browserify-and-gulp/

话虽如此,如果你有正确的编码器编码正确的代码,你的select1似乎对我来说是不可pipe理的。