node-koa搭建MVC/RESTful API專案

pangyongsheng發表於2018-04-02

本文將介紹如何基於node-koa搭建一個完整的mvc及restAPI的專案,專案封裝了路由、模板引擎、 靜態檔案載入等基本功能;首先介紹專案的安裝啟動及目錄結構說明,然後通過一個簡單的登入頁說明mvc的搭建和使用、通過一個人員表格的增刪查改說明restAPI的搭建和使用,最後將簡單說明各模組的實現方式;

檢視效果:http://39.106.166.212:3000

                 http://39.106.166.212:3000/user

檢視專案: https://github.com/pangyongsheng/node-koa-REST-API

一、下載安裝並啟動專案

  下載: git clone https://github.com/pangyongsheng/node-koa-REST-API.git

  切換到目錄 : cd koa

  安裝依賴包: npm install

  啟動專案:   npm run start 

       訪問:   http://127.0.0.1:3000/

  介面如下:

  

二、專案目錄結構說明

  koa        
  ├── app.js   服務啟動檔案 
  ├── controller.js  遍歷controllers資料夾下全部介面檔案新增到路由中
  ├── rest.js     封裝restAPI返回資料處理,簡化api寫法--rest方法
  ├── templating.js  封裝模板引擎載入view下模板檔案,--render方法
  ├── static-file.js  封裝靜態檔案載入方法 
  │
  ├── controllers   該目錄下放置所有介面檔案,如:
  ├── api.js    restAPI介面
  ├── index.js   首頁介面
  ├── ...
  ├── view       該目錄下放置檢視模板檔案,可使用nunjucks模板語法:如
  ├── base.html   基礎模板-header及footer 
  ├── index.html   首頁
  ├── ...
  ├──server      該目錄下放置資料處理類js檔案:如抽取同類業務資料處理方法
  ├──server.js
  ├── ...
  ├──data       該目錄下放置資料庫處理檔案
  ├──config.js   資料庫配置檔案
  ├── ...
  ├──static      改目錄下放置前端靜態檔案,如一些前端類庫、ui、及圖片等
  ├──css
  ├──js
  ├──...
  ├── package.json

三、MVC搭建登入頁

1、編寫頁面程式碼

(1)在view目錄下建立base.html檔案,編寫頁面頁面頭部和尾部的程式碼作為檢視部分,在這裡我們用到了nunjucks的模板語法,這樣可以讓其他的頁面直接呼叫base.html的程式碼;

      

頁面程式碼如上圖,這裡面把文件申明及<head>內的程式碼、<header>和<footer>三部分程式碼作為公共部分

其他頁面可以直接呼叫base.html然後編寫中間的內容(即{% block main%}到{% endblock}中間)即可;

這裡注意 <title>標籤內為{{title}},這裡需要我們在呼叫頁面時直接傳入標題名稱欄位;

(2)在view'目錄下建立index.html,編寫登入頁表單程式碼;

      

這裡我們首先通過{{% extends "base.html" %}}引入公共檢視部分,然後在{{%block mian%}}和{{%block end%}}編寫登入表單;

2、新增訪問介面

(1)在controllers目錄下建立index.js檔案,作為登入頁面的介面檔案;

      

這裡,'GET /'表示請求方式為 get 請求url為/ 即預設路徑

ctx.render是已經封好的方法,傳入要返回的頁面檔案即可,這裡我們返回登入頁,及index.html頁

傳參{title:'KOA'}是我們給頁面模板傳的引數,及在前面模板中<title>預留的值,

(2)訪問hostlocal:3000/即可看到如下登入頁:

      

3、新增表單處理介面(post)

上一步總完成登入頁的功能,在登入點選提交時,會將post請求提交到/signin,

首先我們按以上的方式在view目錄下編寫頁面登入成功signin-ok.html和失敗sigin-fialed.html;(詳細程式碼見專案)

在controller目錄下編寫signin.js處理登入提交到post /signin的資訊;

      

'POST /signin' 表示請求方式和請求url為/signin

通過ctx.request.body獲取請求引數判斷資料是否正確,並返回對應的頁面

      

四、restAPI實現表格資訊的增刪查改

1、建立一個人員資訊表格頁面

(1)在view目錄下編寫檢視檔案userList.html (並在頁面中新增js邏輯程式碼)

      

      

為了簡化程式碼這裡使用vue雙向繫結實現,

注意:vue中模板編譯和nunjucks編譯{{}}符號會衝突 ,需修改vue的編譯格式,在vue中配置delimiters:['${', '}']

頁面中使用v-for迴圈顯示錶格,在js中新增方法getlist通過介面api/userlist獲取全部資料,並在vue生命週期created中呼叫改方法。(詳細程式碼見專案中view/userList.html)

get/api/userlist介面在下一節介紹

(2)在controllers目錄下新增訪問介面list.js

        

與前面登入方法類似,訪問介面為 get /user

(3)訪問hostlocal:3000/user即可看到如下頁面:

      

頁面完成後我們將通過restAPI介面實現頁面所示按鈕的增刪查改各項功能

2、編寫獲取全部人員資訊的rest介面

(1)在data目錄下建立data-userlist.js作為模擬資料,(模擬資料庫返回資料,為方便這裡不使用資料庫)

      

(2)在server目錄下編寫user.js編寫資料處理方法,供rest介面使用

這裡建立getAllUser方法直接返回data-userlist中的全部資料

      

(3)在controllers目錄下建立api.js,用來放置restAPI介面

      

ctx.rest方法中封裝了返回資料及錯誤處理等功能,這裡直接傳入返回的資料物件即可實現restAPI介面功能

(4)訪問呼叫介面

在上一部中我們呼叫了該介面,返回人員列表資料,並通過列表渲染將資料展示到檢視。

2、新增性別篩選功能

(1)在頁面中新增篩選按鈕,並繫結事件,呼叫性別篩選介面

       

      

(2)在api.js中新增api/userlist/m和api/user/f介面,分別用來返回男女人員資訊列表

      

(3)在server/user.js新增獲取資料方法

      

3、新增增加使用者功能

(1)在頁面中新增輸入框及按鈕,繫結新增事件

      

      

點選儲存後put方式像介面api/adduser傳參新增使用者資訊,在成功回撥中呼叫getlist方法,獲取最新使用者資訊;

(2)在api.js中新增put介面api/adduser-呼叫addUser方法

      

(3)在server/user.js中新增addUser方法,處理新增的資料

      

使用者姓名,性別,年齡有前端傳值,id由後臺根據序號排列,然後存入陣列

4、刪除使用者

(1)位頁面刪除按鈕繫結事件並編寫刪除方法向api/userlist介面傳送delete請求

在表格中我們已經新增了刪除按鈕並繫結了del方法,並傳參id,下面直接看del方法

      

在del方法中呼叫了$tttp.delete方法向 api/userlist傳送delete請求並 傳入引數 id (程式碼中'+x'),然後在成功回撥中刪除掉檢視中的資料(這裡也可以直接呼叫getuser方法)

(2)在api.js中增加delete請求借口,在介面中呼叫sever/user.js中的方法(注意這裡獲取引數方法)

      

這裡我們通過ctx.parames.id獲取上一步中的傳參id,這裡我們把引數在傳遞個server中的方法

(3)在server/user.js中新增刪除資料方法

      

5、修改資料

(1)在頁面表格table的部分行列中(可修改的格子)中新增可編輯屬性,並在對應行操作區域新增儲存按鈕,並未儲存按鈕新增sev方法

      

接著編寫sev方法,通過js操作dom的方法獲取表格中的屬性值,作為修改後的引數呼叫傳送post請求到後臺修改資訊,在成功回撥中呼叫getlist方法查詢最新資料顯示到頁面,提升儲存成功

      

(2)在api.js中新增修改資訊介面

      

(3)在server/user.js下編寫修改資訊方法,(這把id作為索引或唯一標識使用)

      


五、mysql連結封裝

  (1)新增資料庫配置檔案,建立連結

  (2)封裝資料庫查詢方法

    

(3)在api中呼叫

    

至此mvc及restAPI實現增刪查改功能均已新增,專案中還有搜尋的功能與其他篩選方法類似,不做說明;

dome中用到了前端部分使用了vue.js、bootstrap、node模組中用了koa-router、koa-cors等模組詳情見 package.json;

測試模組可資料庫這裡不做說明,但在專案中已新增,可使用;

各個模組功能也說明完畢,實現方法可直接看程式碼,有較清晰註釋;


相關文章