在js后端框架中,towerjs与railwayjs是两个仿ror的全栈框架。两者在github上的关注度很相似,都在800左右,不相上下。
关于功能的对比,在stackoverflow上发现了一个汇总:http://stackoverflow.com/questions/9897017/railwayjs-vs-towerjs
RailwayJS | Tower.js | |
---|---|---|
First commit | Jan 2011 | Oct 2011 |
Rails | 2.3.x | 3.x |
Node.js | >= 0.4.x | >= 0.4.x |
Server | * | * |
Client | * | |
Template agnostic | * | * |
Default engine | EJS | CoffeeKup |
Database agnostic | * | * |
Default datastore | MongoDB | MongoDB |
Model validations | validatesPresenceOf('email') | validates('email', presence: true) |
Query scopes | * | * |
Chainable scopes | * | |
Param parsing | * | |
Controllers | * | * |
Resource controllers | * | |
File naming | users_controller.js | usersController.coffee |
vm.runInCustomContext | * | |
Asset pipeline | * | |
Asset compression | * | |
Routing | map.resources('posts') | @resources 'posts' |
Nested routes | * | * |
Generated url helpers | * | |
Generators | * | * |
Command-line api | * | * |
REPL (console) | * | * |
CoffeeScript console | * | |
Asset cache method | timestamp | md5 hash |
Production asset path | /app.css*123123123 | /app-859c828c89288hc8918741.css |
Preferred Language | JavaScript | CoffeeScript |
CoffeeScript support | * | * |
Internationalization | * | * |
Heroku support | * | * |
String case | snake_case | camelCase |
Form builder | * | * |
Semantic form builder | * | |
Table builer | * | |
File watcher API | * | |
Live-reload assets | * | |
Test suite | * | |
Generators for tests | * | |
Twitter Bootstrap | * | * |
HTML5 Boilerplate | * |
从上表可以看出,两者之间的主要差别在于风格。例如railwayjs仿的是ror2.x,而towerjs仿的是ror3.x。变量名风格、习惯使用纯js还是coffee等,都将会是人们选择时的一个考量。这里分别对两者进行一个简单的试用,取得第一感受。
官网首页截图,典型的Bootstrap风格:
Railswayjs的试用非常顺利,在win7 x64下也能顺利安装。
sudo npm install railway -g
</p></div>
</div>
生成一个blog项目:
railway init blog && cd blog
npm install -l
railway generate crud post title content
railway server 8888
open [http://127.0.0.1:8888/posts](http://127.0.0.1:8888/posts)
在开发模式下,它默认使用了redis这个内存数据库,不用安装,直接启动,异常方便。
打开浏览器,访问[http://127.0.0.1:8888/posts](http://127.0.0.1:8888/posts),页面如下:
[](/user_images/878-3.png)
创建一个Post:
[](/user_images/878-5.png)
创建后,回到列表页:
[](/user_images/878-7.png)
查看其中一个:
[](/user_images/878-9.png)
删除:
[](/user_images/878-11.png)
在访问过程中,控制台会显示出请求信息:
[](/user_images/878-13.png)
总之,页面精美,操作流畅,考虑周到,赞一个。
具体的代码不贴了,请直接上官网看。
## TowerJs
官网:[http://towerjs.org/](http://towerjs.org/)
首页截图,看起来也比较素雅:
[](/user_images/878-15.png)
Towerjs的试用过程比较坎坷。首先在windows下安装,有一些依赖的模块安装不上,可能还不支持windows。只好打开虚拟机,启动centos6.x,开始安装。
<div class="mycode">
npm install tower -g
</div>
然后生成一个试用网站:
tower new app
cd app
tower generate scaffold Post title:string body:text belongsTo:user
tower generate scaffold User email:string firstName:string lastName:string hasMany:posts
也很顺利地生成了很多文件。
启动:
sudo chmod +x server.js
sudo node server.js
此时会提示一些第三方模块没有安装上,运行cake命令时,也会有类似提示。于是得分别安装:
sudo npm install coffee-script
sudo npm install forever
需要注意的是,不能加-g,必须把模块们都装在当前目录下(生成node_modules),否则还会提示找不到模块。这一点困扰了我半天才解决。
然后再次运行:
node server.js
会提示连不上数据库。原来towerjs默认使用了mongodb,我们必须先安装mongodb。
到mongodb官网下载最新的mongodb源代码:[http://www.mongodb.org/downloads](http://www.mongodb.org/downloads)
下载后解压,可以看到其中的bin目录,已经包含了可执行的各文件。
sudo mkdir /data/db
sudo chown `id -u` /data/db
cd /mondodb-xxxx/bin
./mongod
如果一切正常,会提示成功。再次启动towerjs生成的app,如果一切正常,会提示如下信息:
[Sat, 05 May 2012 15:38:00 GMT] INFO Tower development server listening on port 3000
在浏览器中访问:[http://localhost:3000](http://localhost:3000),出现如下页面:
[](/user_images/878-17.png)
什么情况?怎么这么丑?!
打开firebug:
[](/user_images/878-19.png)
居然有这么多文件找不到?打开资源浏览器,发现对应的less文件存在:
[](/user_images/878-21.png)
看来需要手动把它们转为.css。
按照官网首页提示,输入:
cake assets:compile
提示:No such task: assets:compile
奇怪,看一下任务列表:
哪有编译任务?!实在进行不下去了。
试下添加User:
中文显示正常:
试用到此结束,不能不说有些失望。安装过程复杂,也不能提供开箱即用的数据库,文档与实际命令有差异,无法编译资源文件,导致最终页面相当丑。
与railwayjs的试用体验相差甚远。railwayjs一共只花了十分钟,而towerjs花了一个多小时。
所以在这两者之间,我将选择基于Railwayjs开发。