JavaScript [分享] Rails 程序员视角看 Express--目录结构与重要文件

saillee · March 29, 2014 · Last by saillee replied at March 30, 2014 · 6679 hits

初学 node.js,暂且先从 Express 来入手,下面是我以 Rails 程序员的角度,用 Rails 项目为参照,对最基本的 Express 项目结构进行对比,做下学习笔记。典型的 Express 项目目录结构如下(图一): 图一

1、node_modules 目录: 保存 node.js 的 module(模组)的地方,类似于 Rails 项目中的 vendor 目录,node.js 中的 module 概念类似于 ruby 中的 gem 包,通过安装不同的 module,项目可以获取到相关的功能扩展,如模板、数据库接口等。这个目录下面安装的 module 与项目根目录下的 package.json 文件有莫大关系。package.json 文件类似于 rails 项目中的 Gemfile,指定了项目中依赖的扩展 module 和相应版本信息。实例见下(图二): 图二 图中中安装了 ejs(选择 ejs 模板时的默认安装)、express(默认安装)和 node-mysql 三个 module;

2、public 目录: 这个 public 目录等于 rails 项目中的 public+assets,分别存放了客户端可以访问的资源,如网页图片、css 和前端 javascript 脚本等资源。

3、routes 目录: express 中的 routes 目录并非和 Rails 项目中的 config/routes.rb 文件概念一致,倒是和 Rails 项目中 app/controllers/目录类似,存放了用于处理 MVC 概念中 controller 的处理部分,也就是存放对应路由的处理程序。路由信息在 app.js 中予以定义,见下面(图三): 图三 如图一中有两个路由处理,index 和 user。

4、views 目录: 这个目录的概念与 Rails 项目中的 views 完全相同,其中的 index.ejs 存放的就是路由 index.js 的模板。

5、app.js 文件: 这个文件是 Express 应用程序的入口文件,存放的 Express 项目中最基本的配置信息。

5、其他: 由于 Express 只是一个轻量级的 Web 框架,多数功能只是围绕 HTTP 协议中常用部分进行了封装,其中没有内置 ORM,所以没有 MVC 概念中 Model 的部分,在实际项目中必须通过 module 来进行扩展。

以前听别的老师说过,Express 从 Sinatra 里借鉴了不少东西。楼主有兴趣的话可以将这两者放在一起比较一下。

#1 楼 @PengEdy 自己暂时对 Express 和 Sinatra 都还不熟悉,只是 Rails 曾经用来做过项目,所以先用 Rails 来参照,权作为自己的学习笔记而已,以后多了解了,会尝试做些对比。 现在从 Rails 到 Express 上还是有很多不习惯,尤其是 Rails 的 ORM 实在是太好用了。最近在看 node.js 方面的东西主要是想多了解下 Javascript 做的后端。原来做 Rails 项目时,基本都是企业应用,感觉后端对数据库的开发是比较主要的,前端基本有一套比较现成的库,现在发现 Javascript 在前后两端方面还是有很多选择的,而且在重客户端上有很多非常好的东西。

这一份 2009 年网路上有关 ruby 与 rails 与 sinatra 的简报: http://www.slideshare.net/adamwiggins/rails-metal-rack-and-sinatra 简报档里的一些列出的 gems 是 2009 那时才有的, 有更多新 gems 的出来可以想像该填在哪些位置。 其中可以比较了解 rails 与 ruby 之间的关系。 简言之,ruby 世界好多的网站框架是多以 rack 为核心, 透过 rack 及许多的 gems 可以组合成所要的框架 而 rails 是把好多元件事先包好 而 sinatra 本身只是 web layer 层, 再加上内建 erb 为预设的 template。 如果试试 gem install sinatra 及 gem install rails 两个所会安装的 gems 数量,差别很多。 检视自己所要做的网站功能不复杂, 结果会发现用 rails 算是杀鸡用牛刀。 而 sinatra 很够用,看要还哪些来组合。 就看是先装好一堆包好的东西, 然后慢慢地改换成不同元件? 还是先装个简单够用, 再慢慢加所需要的元件? 以前 sinatra 号称一个档案就可跑个网站是没错, 但功能愈多后,一个档案的方式并不好维护, 由于大家习惯了 MVC 的好处, 比较能看到模仿 rails 的写法: http://www.sitepoint.com/build-a-sinatra-mvc-framework/ 才有点认识 rails 是怎么组合运作的。

如果会有前端后端开发的区分, sinatra 可能比 rails 来做后端的 API 会更轻巧而适合。

有很多语言的框架就是受 sinatra 所启发: http://en.wikipedia.org/wiki/Sinatra_%28software%29#Frameworks_inspired_by_Sinatra 已用过 rails 的经验,对 sinatra 入手应比 express 会更快进入状况。

#3 楼 @rco 的确现阶段使用 Sinatra 会比我重新学习 Express 要好,除了我对 ruby 熟悉外,Sinatra 同样也可以使用 ActiveRecord 这些。我最近主要是拓宽自己的面,了解下 node.js 下面的东西。现在做 Web 应用,尤其是涉及移动客户端的,在架构上都有了很多的变化,无论后端是用什么语言和框架开发,Javascript 都是跳不过的坎。

You need to Sign in before reply, if you don't have an account, please Sign up first.