成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

用gulp+mock實(shí)現(xiàn)前后端分離

dailybird / 3425人閱讀

摘要:當(dāng)然需要的工具不只有這些,其他的一些可選工具還有文件壓縮壓縮時(shí)用到的文件重命名檢查一般編輯器自帶校驗(yàn)提示工具等等,具體根據(jù)項(xiàng)目需要安裝。

gulp

前端自動(dòng)化構(gòu)建工具

需要配置nodejs環(huán)境, 利用npm安裝全局gulp,安裝后可以輸入gulp指令。

 npm install gulp -g

創(chuàng)建項(xiàng)目目錄、初始化npm包、gulp

npm init 

gulp init

下載gulp插件gulp-connect、gulp-concat這兩個(gè)插件一個(gè)用于創(chuàng)建web靜態(tài)服務(wù)器,另一個(gè)用于文件合并。
這里的各種插件一種是用npm安裝,另一種是用前端的包管理器bower替代npm。

npm install --D gulp
npm install --D gulp-connect
npm install --D gulp-concat

當(dāng)然需要的工具不只有這些,其他的一些可選工具還有文件壓縮gulp-uglify、壓縮時(shí)用到的文件重命名gulp-rename、js檢查gulp-jshint(一般編輯器自帶js校驗(yàn))、gulp-notify提示工具等等,具體根據(jù)項(xiàng)目需要安裝。

編輯gulpfile.js文件用于配置gulp啟動(dòng)

/*
 * @Author: mikey.chishengqi 
 * @Date: 2017-03-29 09:46:33 
 * @Last Modified by: mikey.chishengqi
 * @Last Modified time: 2017-03-29 21:49:53
 */
var gulp = require("gulp"),
    connect = require("gulp-connect"),
    concat = require("gulp-concat"),
    //proxy = require("http-proxy-middleware"); //代理中間件 the middleware of proxy

//connect任務(wù)開(kāi)啟一個(gè)web調(diào)試服務(wù),訪問(wèn)http://localhost:8080 
gulp.task("connect", function () {
    connect.server({
        port: 8080,
        livereload: true,
         middleware: function(connect, opt) {
            return [
                // https://github.com/senchalabs/connect/#use-middleware
                function cors(req, res, next) {
                    res.setHeader("Access-Control-Allow-Origin", "*")
                    res.setHeader("Access-Control-Allow-Methods", "*")
                    next()
                }
            ]
        }
    });
});
//allJs任務(wù),執(zhí)行合并js任務(wù)
gulp.task("allJs", function () {
    //合并數(shù)組中所有的js文件為all.js放入www文件夾中
    return gulp.src(["Content/app/*/*.js","Content/common/*.js"])
        .pipe(concat("all.js"))    //該任務(wù)調(diào)用的模塊
        .pipe(gulp.dest("dist/js"))
        .pipe(rename({suffix:".min"}))     //重命名
        .pipe(uglify())                    //壓縮
        .pipe(gulp.dest("dist/js"))            //輸出 
        .pipe(notify({message:"all task ok"}));    //提示
      
});

//reload任務(wù),在執(zhí)行reload之前先執(zhí)行allJs和sass任務(wù)
gulp.task("reload", ["allJs"], function () {
    //刷新web調(diào)試服務(wù)器
    return gulp.src(["Content/app/"])
        .pipe(connect.reload());
})
//watch任務(wù),開(kāi)啟一個(gè)監(jiān)控
gulp.task("watch", function () {
    //監(jiān)控?cái)?shù)組中文件的修改,如果有修改則執(zhí)行reload任務(wù)
    gulp.watch(["Content/css/*.css", "Content/app/app.js", "Content/app/*/*.js", "Views/*/*.html"], ["reload"]);
});

//定義默認(rèn)的gulp任務(wù),直接執(zhí)行g(shù)ulp即可啟動(dòng)default,啟動(dòng)default前啟動(dòng)connect和watch任務(wù)
gulp.task("default", ["watch","connect","allJs"]);

至此就創(chuàng)建出了localhost:8080的靜態(tài)服務(wù)器 ,剩下的就是需要處理前端的http請(qǐng)求。

mock

生成隨機(jī)數(shù)據(jù),攔截 Ajax 請(qǐng)求

對(duì)于項(xiàng)目中所有的ajax請(qǐng)求進(jìn)行攔截,返回配置的數(shù)據(jù);這樣不用等后端接口,前端即可進(jìn)行測(cè)試;
需要引用mock.js文件和配置文件json.js;如下定義即可隨即生產(chǎn)規(guī)定字段的數(shù)據(jù);

//json.js
 Mock.mock(
     "UserMange/UserLogin", [{
        "userName": "@name",     //模擬名稱
         "age|1-100": 100,          //模擬年齡(1-100)
         "color": "@color",    //模擬色值
         "date": "@date("yyyy-MM-dd")",  //模擬時(shí)間
         "url": "@url()",     //模擬url
        "content": "@cparagraph()" //模擬文本
    }]
)
//或者直接輸出
Mock.mock(
    "PicRotation/GetMasterPagePicList",
    { "dataResult": [], "total": 0, "IsSuccess": true }
)
json-server

這款工具可以搭建出RestAPI服務(wù)器;需要在gulp搭建的服務(wù)器中做跨域代理的處理;將gulp搭建的web服務(wù)器中所有ajax請(qǐng)求跳轉(zhuǎn)到j(luò)son-server搭建的RestAPI服務(wù)器;但有個(gè)坑,無(wú)法針對(duì)post請(qǐng)求做回傳處理,所有post請(qǐng)求只會(huì)在json-server定義的json文件里做添加處理(所以建議用mock),另外此插件需要安裝 http-proxy-middleware 代理插件;并且修改gulp中的middleware屬性的配置。

注意

需要注意的是mock.js與angular之間會(huì)存在兼容問(wèn)題,因?yàn)閍ngular封裝的$http采用的是promise形式的,所以當(dāng)發(fā)起$http.get請(qǐng)求的時(shí)候會(huì)沒(méi)有響應(yīng)。mock.js需要采用angular兼容版本angular-mock.js。

nodejs

nodejs作為服務(wù)端語(yǔ)言它與傳統(tǒng)c和java搭建服務(wù)器方式的不同,它不需要依賴iis或者tomcat,它通過(guò)自身封裝的httpserver模塊不到10行代碼即可搭建出需要的靜態(tài)服務(wù)器。

其實(shí)gulp中的插件gulp-connect的原理就是利用nodejs的httpserver模塊實(shí)現(xiàn)的。所以另外一種實(shí)現(xiàn)前端自動(dòng)化的方式就是直接寫(xiě)nodejs代碼;利用express框架和各種中間件可以快速構(gòu)建出一個(gè)涵蓋服務(wù)端基本所需的服務(wù)器;并且可以利用里面的路由方便創(chuàng)建出一個(gè)restapi服務(wù);但是這帶來(lái)的麻煩就是作為一個(gè)前端工程師在寫(xiě)前端的同時(shí)還要寫(xiě)服務(wù)端的代碼,相當(dāng)于做了兩份工作,增加了前端開(kāi)發(fā)的負(fù)擔(dān)。

目前我自己按照第一套的流程成功在自己本地搭建了開(kāi)發(fā)環(huán)境,整個(gè)流程比較麻煩的一點(diǎn)是,由于請(qǐng)求數(shù)比較多,所以需要編寫(xiě)的mock數(shù)據(jù)很多,另外數(shù)據(jù)的格式需要已知。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84109.html

相關(guān)文章

  • 如何根據(jù)protobuf來(lái)Mock后臺(tái)返回的數(shù)據(jù)

    摘要:簡(jiǎn)稱是公司內(nèi)部的混合語(yǔ)言數(shù)據(jù)標(biāo)準(zhǔn),他們用于系統(tǒng)和持續(xù)數(shù)據(jù)存儲(chǔ)系統(tǒng)??捎糜谕ㄓ崊f(xié)議數(shù)據(jù)存儲(chǔ)等領(lǐng)域的語(yǔ)言無(wú)關(guān)平臺(tái)無(wú)關(guān)可擴(kuò)展的序列化結(jié)構(gòu)數(shù)據(jù)格式。我們想要的結(jié)果是最終的返回的數(shù)據(jù)。如果當(dāng)前開(kāi)發(fā)開(kāi)啟,就回直接返回?cái)?shù)據(jù)。數(shù)據(jù)是與同級(jí)的文件。 Protobuf Google Protocol Buffer( 簡(jiǎn)稱 Protobuf) 是 Google 公司內(nèi)部的混合語(yǔ)言數(shù)據(jù)標(biāo)準(zhǔn),他們用于 RPC ...

    shmily 評(píng)論0 收藏0
  • 前后分離的總結(jié)

    摘要:如何去解決這些問(wèn)題前后端分離大部分的互聯(lián)網(wǎng)公司都分成了前端團(tuán)隊(duì)和后端團(tuán)隊(duì)。方案一采用架構(gòu)業(yè)界很多公司會(huì)采用,單頁(yè)應(yīng)用的架構(gòu),這種架構(gòu)是天然的前后端分離的。方案二淘寶的大前端方案中途島上圖是淘寶基于的前后端分離分層,以及的職責(zé)范圍。 我們遇到了什么問(wèn)題? 1.前端無(wú)法調(diào)試后端未完成的 API:如果后端同學(xué)還沒(méi)有完成 API 開(kāi)發(fā),那么前端同學(xué)就不能對(duì)這個(gè) API 進(jìn)行開(kāi)發(fā)。之前我們都是在...

    enrecul101 評(píng)論0 收藏0
  • 前后開(kāi)發(fā)分離Mock

    摘要:為了使得前端減輕對(duì)后端的依賴,在后端功能尚未實(shí)現(xiàn)的情況下保證前端進(jìn)度的開(kāi)發(fā),我們一般會(huì)手動(dòng)進(jìn)行一些數(shù)據(jù)模擬,即假數(shù)據(jù)。覆蓋攔截請(qǐng)求,目前內(nèi)置支持。 序 有時(shí)候我們開(kāi)發(fā)一般會(huì)分為前后端,前端負(fù)責(zé)數(shù)據(jù)顯示和UI交互,后端負(fù)責(zé)數(shù)據(jù)IO等等。因此造成前端對(duì)后端有嚴(yán)重依賴,使得前端的開(kāi)發(fā)進(jìn)度普遍滯后于后端。 為了使得前端減輕對(duì)后端的依賴,在后端功能尚未實(shí)現(xiàn)的情況下保證前端進(jìn)度的開(kāi)發(fā),我們一般會(huì)手...

    phpmatt 評(píng)論0 收藏0
  • 前后開(kāi)發(fā)分離Mock

    摘要:為了使得前端減輕對(duì)后端的依賴,在后端功能尚未實(shí)現(xiàn)的情況下保證前端進(jìn)度的開(kāi)發(fā),我們一般會(huì)手動(dòng)進(jìn)行一些數(shù)據(jù)模擬,即假數(shù)據(jù)。覆蓋攔截請(qǐng)求,目前內(nèi)置支持。 序 有時(shí)候我們開(kāi)發(fā)一般會(huì)分為前后端,前端負(fù)責(zé)數(shù)據(jù)顯示和UI交互,后端負(fù)責(zé)數(shù)據(jù)IO等等。因此造成前端對(duì)后端有嚴(yán)重依賴,使得前端的開(kāi)發(fā)進(jìn)度普遍滯后于后端。 為了使得前端減輕對(duì)后端的依賴,在后端功能尚未實(shí)現(xiàn)的情況下保證前端進(jìn)度的開(kāi)發(fā),我們一般會(huì)手...

    tyheist 評(píng)論0 收藏0
  • webpack工程化集成React技術(shù)棧(一)

    項(xiàng)目開(kāi)始前,我們先聊一聊關(guān)于項(xiàng)目的一些說(shuō)明。該項(xiàng)目起始于2017年初,當(dāng)時(shí)公司主要技術(shù)棧為gulp+angular,鑒于react的火熱的生態(tài),在公司決定研發(fā)bss管理系統(tǒng)時(shí)選用react開(kāi)發(fā),目的也是為react native打下基礎(chǔ),以解決后期公司大前端技術(shù)棧的逐步成熟。(當(dāng)時(shí)沒(méi)有選擇vue開(kāi)發(fā)的主要原因是weex生態(tài)還不夠特別成熟),既然決定換新,項(xiàng)目的構(gòu)建也跟著一起換,從gulp轉(zhuǎn)向火熱的...

    tianhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<