[关闭]
@Yori 2015-02-01T02:22:03.000000Z 字数 4321 阅读 2953

如何用Sails.js在Ubuntu VPS上快速创建Node.js应用

JavaScript


[注:本文翻译自https://www.digitalocean.com/community/tutorials/how-to-create-an-node-js-app-using-sails-js-on-an-ubuntu-vps
因译者水平有限,翻译如有不当之处欢迎批评]


什么是Sails.js?

Sails.js使部署一个定制的企业级Node.js应用变成一件极为简单的事,它的设计模仿了像Ruby on Rails这样的MVC框架,但是更支持现代应用的开发需求:可扩展的数据驱动层的API,面向服务的架构。它非常适合用来开发聊天、实时信息记录或者多人游戏。

换句话说,Sails.js允许你方便快速得使用Node.js生成应用,并通过MVC模式来使管理和维护代码变得更加简单。Sails.js提供了很多命令来自动生成Models和Controllers,减少开发者的时间消耗并使开发更快速(Views必须在/views/:controller/:method.ejs模板下的/views目录中手动创建)。虽然EJS是默认采用的不过你也可以使用多种模板语言,但是使用EJS开发的话会更简单安全。

Sails.js同样也由多种适配器满足你使用任意一种数据库和你的应用搭配,这给了开发者最大限度的灵活性而不像其他的MVC框架一样限定我们只能使用MoMongoDB。

所有的这些和部署上的事实,所有关于文件的级联和精缩都意味着你不必花费过多的时间浪费在框架的配置上,毕竟它全都准备好了并且易于使用。

在Ubuntu上安装Node.js

  1. 安装必要的依赖关系

    sudo apt-get install python-software-properties python g++ make
    

    如果你使用的是Ubuntu 12.10,你还需要安装这些

    sudo apt-get install software-properties-common
    
  2. 添加PPA

    sudo add-apt-repository ppa:chris-lea/node.js
    
  3. 更新包列表信息

    sudo apt-get update
    
  4. 安装Node.js

    sudo apt-get install nodejs
    

安装Sails.js

在命令行中输入下面命令来安装最新的稳定版本

sudo npm install sails -g

注:-g意味着全局安装了Sails.js,并且它可以像了命令行工具一样被使用

创建Sails应用

在你想要生成应用的目录(比如/var/www)下运行

sails new project-name

这将生成一个新的项目并且会创建一个叫做project-name的目录

启动Sails.js服务

为了看看这个模板应用长什么样,我们需要进入到项目目录中并启动此服务:

  1. cd project-name
  2. sails lift

这个服务被1337端口监听,你可以通过localhost:1337或者目标IP访问,你看到的页面和下面这个差不多:

1

创建Controllers

创建Controllers是非常简单的,Sails CLI帮你做了所有复杂的工作。现在我们来创建一个叫做user的Controller,它有index,show, edit, delete四个方法,而你所需要做的只是运行下面这条命令

sails generate controller user index show edit delete

这个命令会在api/controllers中创建一个名叫UserController.js的文件,大致如下(原文作者做了一些注释来解释每个方法的功能和如何实现)

  1. /*---------------------
  2. :: User
  3. -> controller
  4. ---------------------*/
  5. var UserController = {
  6. // To trigger this action locally, visit: 'http://localhost:port/user/index'
  7. index: function(req,res) {
  8. // This will render the view: /var/www/sails-test/views/user/index.ejs
  9. res.view();
  10. },
  11. // To trigger this action locally, visit: 'http://localhost:port/user/show'
  12. show: function(req,res) {
  13. // This will render the view: /var/www/sails-test/views/user/show.ejs
  14. res.view();
  15. },
  16. // To trigger this action locally, visit: 'http://localhost:port/user/edit'
  17. edit: function(req,res) {
  18. // This will render the view: /var/www/sails-test/views/user/edit.ejs
  19. res.view();
  20. },
  21. // To trigger this action locally, visit: 'http://localhost:port/user/delete'
  22. delete: function(req,res) {
  23. // This will render the view: /var/www/sails-test/views/user/delete.ejs
  24. res.view();
  25. },
  26. };
  27. module.exports = UserController;

创建Models

通过Sails.js创建Models和创建Controllers一样简单,你不必担心数据库迁移,Sails.js非常智能的帮你完成了这些。你可以选用Mysql或者其他很多能搜索到适配器("adapters")的数据库,或者可以考虑翻翻创作者的GitHub仓库。

当一个Model被创建好后,你可以之后再通过添加指定字段来添加到该模型,格式是[name]:[type]

例如,创建一个叫做user的Model,拥有name, email, password三个字段,你所需要做的也只是运行下面这个命令

sails generate model user name:string email:string password:string

这个命令将会在api/models目录下创建一个名叫User.js的文件,如下所示

  1. /*---------------------
  2. :: User
  3. -> model
  4. ---------------------*/
  5. module.exports = {
  6. attributes: {
  7. // Simple attribute:
  8. // name: 'STRING',
  9. // Or for more flexibility:
  10. // phoneNumber: {
  11. // type: 'STRING',
  12. // defaultsTo: '555-555-5555'
  13. // }
  14. name: {
  15. type: 'STRING'
  16. },
  17. email: {
  18. type: 'STRING'
  19. },
  20. password: {
  21. type: 'STRING'
  22. },
  23. }
  24. };

创建一个Blueprint API

你可以在生成Controllers和Models的同时,生成一个Blueprint API使你能够访问/user和查看存储数据的JSON包。

sails generate user

BlurPrint API节省了你的时间通过创建Model和Controller之间的联系,允许你通过路由向数据库添加新的记录,比如说访问http://localhost/user/create?name=John+Smith 会生成一个名叫"John Smith" 的新用户并且会返回一个该Model创建时所有记录的JSON数组,所以上述URL会返回这样一个结果:

{"name":"John Smith","createdAt":"2013-07-10T20:10:01.038Z","updatedAt":"2013-07-10T20:10:01.038Z","id":1}

在实践中,你可能会希望改变或添加新的方法到Controller中,但是每个Controller默认都会有create(), find(), findAll(), update(), 和destroy(),虽然也可以通过禁用或者自定义它们来忽略掉。

数据也可以通过执行带插入数据的JSON字符串的POST请求来插入,例如:

{
 name: 'John Smith'
}

添加路由

路由可以在config/routes.js中添加,这个文件的注释写的非常好,所以我觉得只需要用图片展示下而不用特地去解释它
2

将服务器设置为生产模式

当你准备好将一个应用部署到生产环境下的时候,将它的端口从1337换成80,当然Sails.js也能使你非常容易的做到这点。

  1. 打开config/application.js
  2. 如果这是服务器上唯一一个应用,将第7行port: 1337改为port: 80
  3. 如果服务器上有多个应用而且你用的服务器是Nginx,你需要修改Nginx的块设置来代理你的Sails.js 应用运行的端口:

    location / {
    proxy_pass         http://127.0.0.1:1337/;
    proxy_redirect     off;
    
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
    
  4. 如果服务器上有多个应用而且你用的服务器是Apache,你需要修改Apache的虚拟主机设置来代理你的Sails.js 应用运行的端口:
    ProxyRequests Off

    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>
    
    ProxyPass / http://127.0.0.1:1337
    ProxyPassReverse / http://127.0.0.1:1337
    
  5. 在第15行,将environment: 'development'修改为environment: 'production'

  6. 运行下面这个命令来安装forever

    sudo npm install -g forever
    
  7. 运行

    forever start /path/to/app.js
    

    来启动后台进程。你可以通过forever list来检查你的应用在后台运行,forever list会列出所有正在运行的Node.js进程。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注