1. 程式人生 > >Sails+MVC+Mysql+Node+學習筆記一

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

這裡寫圖片描述

專案構建

安裝Node就不多說了,

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

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

2.目錄結構介紹

這裡寫圖片描述

2.1api

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

  1. controller目錄下存放的就是頁面與後臺伺服器通訊的介面,如果對應的java,那麼就是java裡面的Action層或者使用Spring
    MVC ,那麼也是對應的Controller,裡面存放的就是介面。
  2. models,資料模型層,也就是實體層,對應java裡面的entity。
  3. policies(策略),在controller之前執行,主要工作是session認證,如果session是認證通過了,那麼就可以進入下一個策略或者如果是最後一個策略,那麼就可以進入controller了,個人感覺像是java裡的過濾器或者分發器。
  4. responses,自定義的響應。舉個例子,一般從前臺發出一個請求後,如果經過了伺服器,那麼都會給客戶端返回一個結果,除了本身自帶的響應方式,也可以採用自定義的響應,比如返回一個404頁面,返回500頁面或者返回字串等等。
  5. services,業務邏輯處理層,採用es6的Module的語法編寫。
2.2assets靜態資源層

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

2.3config配置層

這層裡面有env和locales兩層,然後和一些js。

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就是要手動建表,那麼這個時候你得把實體與資料庫對應起來之不過有點麻煩,對於初學者來說還是把實體與資料庫手動對應起來,因為之後還會有複雜的表間關係,比如說一對一、一對多、多對多等。

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:對應的就是裡面的方法名。