1. 程式人生 > >node-koa搭建MVC/RESTful API項目

node-koa搭建MVC/RESTful API項目

9.png 技術 href 傳值 語法 也說 方法 for循環 技術分享

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

完整項目地址: 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作為索引或唯一標識使用)

      技術分享圖片

至此mvc及restAPI實現增刪查改功能均已添加,項目中還有搜索的功能與其他篩選方法類似,不做說明;

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

測試模塊可數據庫這裏不做說明,但在項目中已添加,可使用;

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

node-koa搭建MVC/RESTful API項目