一統江湖的大前端(2)—— Mock.js + Node.js 如何與後端瀟灑分手

来源:https://www.cnblogs.com/dashnowords/archive/2018/09/12/9632492.html
-Advertisement-
Play Games

《一統江湖的大前端》系列是自己的前端學習筆記,旨在介紹javascript在非網頁開發領域的應用案例和發現各類好玩的js庫,不定期更新。如果你對前端的理解還是寫寫頁面綁綁事件,那你真的是有點OUT了,前端能做的事情已經太多了, , , , , , 甚至 ,什麼火就搞什麼,活脫脫一個 蹭熱點小能手 。 ...


《一統江湖的大前端》系列是自己的前端學習筆記,旨在介紹javascript在非網頁開發領域的應用案例和發現各類好玩的js庫,不定期更新。如果你對前端的理解還是寫寫頁面綁綁事件,那你真的是有點OUT了,前端能做的事情已經太多了, 手機app開發 , 桌面應用開發 , 用於神經網路人工智慧的庫 , 頁面游戲 , 數據可視化 , 甚至 嵌入式開發 ,什麼火就搞什麼,活脫脫一個蹭熱點小能手。如果你也覺得前端的日常開發有些枯燥,不妨一起來看看前端的另一番模樣。

為什麼你總是下不了班

大部分工程化的項目為方便維護,大多都會採用前後端分離的開發方式,而前端和後端的工作基本也是同時下發的,這時前端開發人員就會很尷尬,後端在幹活的時候,領導幾乎一定會讓你先做個靜態頁面看看,這時候你和後端之間可能只是約定了介面(當然也可能連介面都沒約定,那我只能祝你幸福了),並沒有數據的傳輸,沒法直接拿到填充網頁的數據,如果一次將前端代碼寫到位,那麼打開網頁時輕則頁面提示沒有獲取到數據,重則直接報錯退出腳本。

而真正的問題在於靜態頁面做起來是非常快的,以至於你的領導會認為當你把靜態頁面中加入javascript的邏輯部分的代碼後也應該非常快,而實際上邏輯部分的代碼量和聯調的工作量幾乎是寫一個靜態頁面的5-10倍
基本上前端的一個需求的開發至少需要經歷靜態頁面——>業務邏輯+靜態數據——>業務邏輯+http請求及數據處理這幾種不同形態才能交工,那麼真實的時間軸變成了這樣:

角色 階段1 階段2 階段3 階段4 階段5 階段6
後端 寫後臺代碼 寫後臺代碼 回家睡覺 回家睡覺或忙其他事 修改前端提交的bug 重覆4-5直到能上線
前端 寫靜態頁面 漫無目的改樣式 寫前端邏輯 邊開發前端邊測試介面 漫無目的改樣式 重覆4-5直到能上線

無論從哪個方面看,前端都是一個打雜的活,無論從哪個角度看,前端也都是一個小弟臉,下不了班好像也是應該的。

Node.js

Node火起來的時候,前端就流行這樣一句話:不會Node.js的前端,是不完整的,簡單地說,Node.js將javascript能力擴展至服務端的關鍵一步,js也是從此開始了自己無孔不入的風騷操作,網上關於如何使用Node.js搭起一個本地伺服器數不勝數,本篇中使用express框架來快速搭建Mock伺服器。

Mock.js

Mock.js(github倉庫地址)是一個生成Mock數據(也就是虛擬數據)js庫,語法簡單明瞭卻非常好用,支持前端和服務端兩種環境引用,感興趣的讀者可以點擊上面鏈接進行學習,官方Wiki提供了全套文檔,最多1小時就可以上手。

工作方式 優勢 劣勢
客戶端 操作方便,純前端本地即可實現 1.不易進行介面管理 2.協作人員無法獲得Mock數據
服務端 1.前端代碼幾乎不需改動 2.其他人員可訪問獲得Mock數據 需要搭建Mock伺服器,相較前者稍複雜

簡單瀏覽一下其使用方式:

# 安裝
npm install mockjs
// 使用 Mock
var Mock = require('mockjs')
var data = Mock.mock({
    // 屬性 list 的值是一個數組,其中含有 1 到 10 個元素,每個元素均包含id,name,description屬性
    'list|1-10': [{
        'id|+1': 1,// 屬性 id 是一個自增數,起始值為 1,每次增 1
        'name': '@cname',//占位符語法,生成一個中文名稱
        'description|3-5':'@csentence',//占位符語法,生成3-5個中文句子
        'area':'@province',//省份占位符,將隨機生成省份名稱
    }]
})
// 輸出結果
console.log(JSON.stringify(data))

前端的任務到底是什麼

前端開發的本質,是數據的採集和數據的呈現,即把用戶提交的數據準確安全地發送給伺服器,把伺服器傳遞的數據按照設計圖展示在界面上,無論是否界面是否經過CSS的美化,是否經過交互設計的易用性優化,最本質的東西是一樣的。
換句話說,你需要做到的是後端給的數據正確時,確保將其按設計稿展示出來,後端給的數據不正確時,給出提示並儘可能不要讓腳本報錯退出。

使用Nodejs和Mockjs搞事情

建議的做法是:使用node.js框架express快速搭建伺服器,與後端人員約定好介面後,使用Mock.js在服務端生成各類型虛擬數據,前端開發人員直接對接Mock伺服器

你應該做的,是一次性將前端代碼寫到位並能夠快速定位聯調異常,然後回家睡覺,而不是漫無目的勞作和等待跟其他人互相扯皮。

1.安裝node.js
+ 安裝後打開cmd命令行,輸入`node -v`, 若正確顯示版本號則安裝成功。

附件中包含: nodeV8.9.4版本windows安裝包

2.安裝其他依賴包
  • yarn(替代npm的包管理工具): npm install yarn(可選)
  • express (express框架): npm install express -g
  • express-generator (express項目生成插件): npm install express-generator -g
  • mockjs(模擬數據生成庫): npm install mockjs

若安裝速度較慢,可切換npm源為cnpm或使用Yarn進行包管理

3.生成新的express項目並編寫服務端

本篇力求簡單粗暴,只講使用不講express目錄結構,感興趣的同學可自行研究

♬ 3.1 在指定路徑下打開命令行,輸入express mockserver,即可生成名為mockserver的項目

♬ 3.2 打開app.js文件,在 var app = express() 之後加入如下代碼,屏蔽跨域:

            app.all('*', function(req, res, next) {
                res.header("Access-Control-Allow-Origin", "*");
                res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
                next();
            });

♬ 3.3 仿照users.js文件的格式及其在app.js文件中的路由掛載方式(任何一個熟練地代碼搬運工肯定看得懂),引入mockjs,生成需要的隨機數據,當接收到前端發送的請求時,返回生成的數據:

//服務端響應代碼片段/routes/operationboard.js:
//業務邏輯為查詢系統告警信息列表
//node伺服器啟動後,請求地址為:127.0.0.1:3000/operationboard/systemwarn
//3000埠為express預設啟動埠

var express = require('express');
var router = express.Router();
var Mock = require('mockjs');
var Random = Mock.Random;

router.get('/systemwarn', function (req, res, next) {
  var data =Mock.mock({
      'list|20':[{
            'id|+1':1,
            'serial_number|1-100':1,
            'warn_number|1-100':1,
            'warn_name|1':['流水線編排服務異常','磁碟占用超過閾值'],
            'warn_level|1':['緊急','重要'],
            'warn_detail':'環境IP:10.114.123.12,服務名稱:XX',
            'create_time':Random.datetime(),
            'finish_time':Random.datetime(),
            'contact|4':'abc'
        }] 
      });

  res.send({
    meta : {
      message: 'success'
    },
    status:true,
    data: data.list
  })
})
module.exports = router;

瀏覽器訪問可在控制台打出返回數據:

♬ 3.4 在mockserver項目目錄下打開命令行工具,輸入npm start,待服務啟動後,打開前端頁面即可看到伺服器返回的模擬數據。

♬ 3.5 開啟其他人員的訪問能力,其實就是在本地搭建一個伺服器。

實現方式1——通過express工程來實現node伺服器

將前端代碼拷貝至express項目目錄中public文件夾(本例中為/mockserver/public),打開命令行工具輸入ipconfig查詢本機IP,將127.0.0.1替換為本機IP,然後在瀏覽器直接訪問即可打開網頁。

實現方式2——傳統Apache伺服器

為方便管理,直接使用開源XAMPP集成環境,安裝完成後一鍵開啟apache伺服器,並將前端代碼拷貝至安裝目錄中htdoc文件夾中的子文件夾中,然後以方式1中類似的方式在瀏覽器中訪問即可,由於服務端代碼取消了跨域限制,故即使埠號不同,apache伺服器中的網站仍然可以訪問node伺服器中的介面並拿到數據。

♬ 3.6 最後,項目是大家一起做的,不是你撇清責任就完事了的,為你所做的一切提供一個可參考訪問的excel文檔並把它發給與你合作開發的後端是有禮貌的做法。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本來這一篇文章,早就應該寫了,但是最近一直在研究項目的安全性,就一直耽擱了。研究了一段時間的安全性,收穫頗豐,下一篇文章,將總結一下最近的收穫。好了,先把Picasso捋一遍。老規矩,先上流程圖。這張圖,從網上找來的。 Picasso的簡單使用 build.gradle依賴 載入圖片 就一句代碼,就 ...
  • 環信EaseUI 集成,集成不做描述,看文檔即可,下麵主要談一些對easeui的個性化需求修改。 該篇文章將解決的問題: 1、如何發送視頻功能 2、未完待續。。 一、如何發送視頻 1、環信easeui 會話功能預設支持圖片,拍照,位置 三個功能 想支持播放視頻需要自己添加。 官方提供發送視頻方法: ...
  • 最近在開發的時候遇到了一個很坑的問題,在三星6.0手機上請求介面時候報了一個異常:Throwing new exception 'length=1658; index=3248' with unexpected pending exception: java.lang.ArrayIndexOutOf ...
  • 這裡分享下我在日常開發中對 Gradle 的常用配置規則 一、版本號配置 當項目逐漸演進的過程中,主工程依賴的 可能會越來越多,此時就需要統一配置各個 的編譯參數了 在工程的根目錄下新建一個 文件,命名為 ,在此文件中統一聲明工程的編譯屬性和依賴庫的版本號 預設情況下, 的 文件的預設配置如下所示 ...
  • 1.先上圖: image.png image.png image.png image.png 因為做過了好幾次這樣的需求,所以這次想到把它拿出來,下次再需要做的時候直接拿過來改改就能用了,節約時間。 2.功能 文字收起和展開,行高自適應; 圖片九宮格,支持圖片預覽和視頻播放 還想要什麼功能就自己去搞 ...
  • 在angularjs的程式里,等號運算符有下麵幾種運算: ...
  • 恢復內容開始 今天我們來說說關於JQuery中事件綁定中on綁定的一些小問題,直接上代碼了,大家拷下去就可以用 恢復內容結束 恢復內容結束 ...
  • 前言 本文講述怎麼實現動態載入組件,並藉此闡述適配器模式。 一、普通路由例子 以上是最常見的 。在簡單的單頁應用中,這樣寫是ok的。因為打包後的單一js文件 也不過200k左右, 之後,對載入性能並沒有太大的影響。 但是,當產品經歷多次迭代後,追加的頁面導致 的體積不斷變大。這時候,優化就變得很有必 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...