Sails+MVC+Mysql+Node+學習筆記一

這裏寫圖片描述

項目構建

安裝Node就很少說了,java

1.sails安裝與項目新建運行

npm install sails -g//全局安裝

sails new project-name//新建項目

cd project-name //進入剛纔新建項目的目錄

sails lift //運行項目,運行原理也是直接在項目目錄路徑下使用node app.js
npm install sails-mysql --save //--save 把安裝的模塊寫進package.json

到了這一步,環境算是搭建完成。node

2.目錄結構介紹

這裏寫圖片描述

2.1api

在api目錄下,有着controller、hooks、models、policies、responses和services幾個目錄mysql

  1. controller目錄下存放的就是頁面與後臺服務器通信的接口,若是對應的java,那麼就是java裏面的Action層或者使用Spring
    MVC ,那麼也是對應的Controller,裏面存放的就是接口。git

  2. models,數據模型層,也就是實體層,對應java裏面的entity。es6

  3. policies(策略),在controller以前執行,主要工做是session認證,若是session是認證經過了,那麼就能夠進入下一個策略或者若是是最後一個策略,那麼就能夠進入controller了,我的感受像是java裏的過濾器或者分發器。sql

  4. responses,自定義的響應。舉個例子,通常從前臺發出一個請求後,若是通過了服務器,那麼都會給客戶端返回一個結果,除了自己自帶的響應方式,也能夠採用自定義的響應,好比返回一個404頁面,返回500頁面或者返回字符串等等。數據庫

  5. services,業務邏輯處理層,採用es6的Module的語法編寫。npm

2.2assets靜態資源層

在這層目錄裏面有,js,image,styles,templates,這個目錄裏面主要放的就是靜態資源,沒什麼說的。json

2.3config配置層

這層裏面有env和locales兩層,而後和一些js。api

env中有一個development.js裏面的註釋是以下:

開發環境配置,這個文件夾裏面包含了開發團隊共享的一些配置,好比api的名稱,數據庫的密碼,若是你在你的Sails應用中使用了版本控制器,這個文件也會提交到你的資源倉庫裏面,除非你在gitignore中添加了一個信息,代表這個文件是私有的或不公開的。

env中的production.js裏的註釋以下:
項目環境配置,與development相似,可是從註釋中看到要多一些東西,好比配置端口的和日誌的

2.4task任務層

這層裏面主要放置的是grunt的任務,

2.5views層

這一層主要放置的是做爲展現的前臺頁面,一種狀況是使用node作單純的後臺服務器,不處理前臺業務,而另一種狀況是採用模塊化的思想,對結構進行分層,達到MVC的合理實現,原本Sails就是一個MVC框架因此第一種狀況仍是不太會出現。

3開始搭建項目

總體流程:新建數據庫 -> 新建表 -> 建實體 -> 在sails中搭建環境 -> 編碼 -> 獲得結果

3.1新建數據庫和表

建好mysql數據庫,而後新建表,新建表有兩種新建方式,一種是自動建表,另一種是手動建表。手動建表我就很少說了。

3.2連接數據庫

設計的主要文件是config裏面的connections.js,裏面存放的是連接數據庫的配置,這裏的配置不光只能配置這麼一個連接,能夠多個不一樣或相同數據庫,代碼以下:

mySqlServer: {
      adapter: 'sails-mysql',
      host: 'localhost',
      port: 3306,
      user: 'root',
      password: 'root',
      database: 'myproject',
      charset:'utf8'
    }

而後下一個重要文件就是models.js裏面的文件,裏面存放的是數據庫使用的那個連接,以上面的名字做爲鍵值,代碼以下:

connection: 'mySqlServer',
  migrate: 'alter'

connection :表示我是用的就是mySqlServer這個連接
migrate:alter修改,這意味這對這個數據在運行項目時時會根據你實體的設計修改數據中的表結構的。而safe就是要手動建表,那麼這個時候你得把實體與數據庫對應起來之不過有點麻煩,對於初學者來講仍是把實體與數據庫手動對應起來嗎,由於以後還會有複雜的表間關係,好比說一對1、一對多、多對多等。

3.3創建數據模型

回到api層理的models裏面,在裏面新建好js文件,值得注意的是文件名稱,這個名稱直接關係到你以後的查詢,刪除等操做,我新建的operator的代碼以下:

module.exports = {
  attributes:{
    username:{
      type:'string',
      required:true
    },
    password:{
      type:'string',
      required:true
    }
  }
}

除了這兩個字段,sails會自動給你在表裏面新建三個字段,id,createdAt,updatedAt,新建好數據的表結構以下圖所示:
這裏寫圖片描述

3.4測試數據連接

執行代碼在項目路徑下進入CMD命令窗口
node app.js或者sails lift,執行完以後若是沒有報錯且新建好數據庫那麼就沒什麼問題了。
那麼在這個階段容易碰到的問題有那些呢:

Consistency violation: A model (`operator`) references a datastore which cannot be found (`otherSql`).

這句話的意思是,operator這個數據模型在otherSql這個連接中找不到。因此遇到這個狀況就檢查是否是連接配的有問題或者Mysql的服務已關閉。

3.5controller的配置

controller配置裏面的是交互的接口,代碼以下:

module.exports = {
  findOne:function (req,res) {
    var id = req.param('id');
    if(id){
      console.log(id);
      operator.find(id, function operatorFound(err, entity) {
        res.send(entity,200);
      });
    }else{
      console.log("是啊比");
      res.send("失敗",500);
    }
  }
};

一個簡單的查詢就這麼完成了,寫完成以後就是驗證編寫的正確性了。在瀏覽器輸入url:

http://localhost:1337/user/findOne?id=1

查出來的結果如圖所示:

這條數據手動添加的,這樣一個很簡單的demo算完成了。

4補充

若是想要修改項目訪問端口,可在local.js裏面添加:port:端口號,項目訪問默認路徑是user,想要修改的話,能夠在route裏面修改進行訪問。
代碼以下:

'/findOne':{
    controller:'UserController',
    action:'findOne'
  }

起鬨controller對應的就是controller的文件名(不添加後綴),action:對應的就是裏面的方法名。

sails官網

grunt官網

es6-阮一峯-模塊

相關文章
相關標籤/搜索