Mock.js 和Node.js詳細講解

????原文地址:http://www.manongjc.com/article/10503.html

《一統江湖的大前端》系列是自己的前端學習筆記,旨在介紹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服務器,相較前者稍復雜

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

 

前端的任務到底是什么

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

使用Nodejs和Mockjs搞事情

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

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

1.安裝node.js

 

附件中包含:?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()?之后加入如下代碼,屏蔽跨域:

 

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

 

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

? 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文檔并把它發給與你合作開發的后端是有禮貌的做法.

?

?

?

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249229.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249229.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249229.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

架構圖

負載均衡 分布式 轉載于:https://www.cnblogs.com/jiqing9006/p/10672280.html

網絡操作系統P12頁答案

1.什么是網絡操作系統?網絡操作系統具有哪些基本功能?網絡操作系統:專門為網絡用戶提供操作接口的系統軟件,除了管理計算機的軟件和硬件資源具備單機操作系統,并且為網絡用戶提供各種網絡服務。當然網絡操作系統不僅要…

如何將存儲在MongoDB數據庫中的數據導出到Excel中?

將MongoDB數據庫中的數據導出到Excel中,只需以下幾個步驟: (1)首先,打開MongoDB安裝目錄下的bin文件夾,(C:\Program Files (x86)\MongoDB\Server\3.2\bin);此處視個人安裝…

vue 項目初始化時,npm run dev報錯解決方法

錯誤如下: npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! travel1.0.0 dev: webpack-dev-server --inline --progress --config build/webpack.dev.conf.js npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the travel1.0.0 dev script. npm ERR…

JDK源碼分析

https://www.jianshu.com/p/f1f1f14e7fbe

VSCode 初次寫vue項目并一鍵生成.vue模版

1.安裝vscode 官網地址:https://code.visualstudio.com/2.安裝一個插件,識別vue文件 插件庫中搜索Vetur,下圖中的第一個,點擊安裝,安裝完成之后點擊重新加載微信圖片_20180723174649.png 3.新建代碼片段 文件-->…

文本聊天室(TCP-中)

開始我們今天的代碼實現,我們接著上一回,上回實現了服務器的代碼這次實現客戶端的UI(界面)層, 我們界面層采用javafx來進行繪制,首先有個登錄服務器的界面然后切換到聊天界面運行結果如下.源代碼如下: 1 package jffx.blogs.net;2 3 import javafx.appli…

Oracle 查詢庫中所有表名、字段名、字段名說明,查詢表的數據條數、表名、中文表名...

查詢所有表名:select t.table_name from user_tables t;查詢所有字段名:select t.column_name from user_col_comments t;查詢指定表的所有字段名:select t.column_name from user_col_comments t where t.table_name BIZ_DICT_XB;查詢指定表…

lucene原理

https://www.jianshu.com/p/0cfe042412a2

電商網站前端架構 學習筆記(全是干貨)

1:前端架構的基本知識 1: 前端工程師必須會的一些技能 前端工程師基本技能圖.PNG 2: 前端架構基本知識 什么是前端架構? 每個人對每個架構有不同的認識和一些想法。沒有一個架構是完美的,只有一個架構是不是適合你的。哪個個架構符合你的需求的時候&#xff0c…

愛好-摩托車:鈴木

ylbtech-愛好-摩托車:鈴木1.返回頂部 2.返回頂部3.返回頂部4.返回頂部5.返回頂部 1、http://www.suzuki-china.com/motor/2、6.返回頂部作者:ylbtech出處:http://ylbtech.cnblogs.com/本文版權歸作者和博客園共有,歡迎轉載&#x…

Unable to preventDefault inside passive event listener

轉自:https://segmentfault.com/a/1190000008512184 測試: body {margin: 0;height: 2000px;background: linear-gradient(to bottom, red, green); }// 在 chrome56 中,照樣滾動,而且控制臺會有提示,blablabla window…

thymeleaf 中文文檔

https://raledong.gitbooks.io/using-thymeleaf/content/

vue面試題,知識點匯總(有答案)

一. Vue核心小知識點 1、vue中 key 值的作用 key 的特殊屬性主要用在 Vue的虛擬DOM算法,在新舊nodes對比時辨識VNodes。如果不使用key,Vue會使用一種最大限度減少動態元素并且盡可能的嘗試修復/再利用相同類型元素的算法。使用key,它會基于…

EF中Take和Skip的區別

以例子來說明: 數據庫中Orders表如下: 代碼部分: 運行結果: 可以看出:Take()方法的作用是從查詢結果中提取前n個結果;而Skip()方法則是跳過前n個結果,返回剩余的結果。轉載于:https://www.cnblo…

最短路徑次短路徑算法

容易理解:https://blog.csdn.net/m0_37345402/article/details/76695930 https://blog.csdn.net/qq_36386435/article/details/77403223 https://blog.csdn.net/u011815404/article/details/80441443轉載于:https://www.cnblogs.com/genggeng/p/9810316.html

springmvc 中文文檔

https://www.w3cschool.cn/spring_mvc_documentation_linesh_translation/spring_mvc_documentation_linesh_translation-9ivd27r4.html

詳解Vuex常見問題、深入理解Vuex

Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態,并以相應的規則保證狀態以一種可預測的方式發生變化。 狀態?我把它理解為在data中的屬性需要共享給其他vue組件使用的部分,就叫做狀態。簡單的…

Gym 101982 (2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) )

傳送門&#xff1a; Problem A 溫暖的簽到題 #include<bits/stdc.h> using namespace std; const int maxn1007; char s1[maxn],s2[maxn]; int main(){ios::sync_with_stdio(false);cin.tie(0);int n,k,sum00,sum10;cin>>k>>s1>>s2;nstrlen(s1);for (i…

day02 while循環 運算符 格式化輸出 編碼

今日主要內容 while循環:判斷條件是否成立。 如果成立執行循環體。然后再次判斷條件&#xff0c;。。。。。直到條件不成立的時候跳出循環 語法&#xff1a; while 條件:   循環體 else:   當條件不成立的時候執行這里 和break沒關系 break 終止當前循環 continue 停止當前…