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

資訊專(zhuān)欄INFORMATION COLUMN

moky = (mock + proxy) // 一個(gè)簡(jiǎn)潔通用的前后端協(xié)作工具

miqt / 815人閱讀

摘要:現(xiàn)在一般需要分前后端,因?yàn)榇罅壳岸丝蚣芎凸ぞ哝湹挠咳敫词切枨髲?fù)雜了,讓前端可以跟后端獨(dú)立開(kāi)來(lái)。但是,無(wú)論是前端去寫(xiě)模板,亦或是完全前后端分離去寫(xiě),都脫離不了與后端進(jìn)行數(shù)據(jù)交互。

--> GitHub地址

舊石器時(shí)代,Web 開(kāi)發(fā)并不會(huì)去刻意區(qū)分前后端,寫(xiě)后端的人覺(jué)得寫(xiě)數(shù)據(jù)庫(kù)跟寫(xiě)模板都是應(yīng)該具備的技能?,F(xiàn)在一般需要分前后端,因?yàn)榇罅壳岸丝蚣芎凸ぞ哝湹挠咳耄ǜ词切枨髲?fù)雜了),讓前端可以跟后端獨(dú)立開(kāi)來(lái)。但是,無(wú)論是前端去寫(xiě)模板,亦或是完全前后端分離去寫(xiě) JSX,都脫離不了與后端進(jìn)行數(shù)據(jù)交互。

以上是本工具產(chǎn)生的動(dòng)因,我們暫且將前后端交互的數(shù)據(jù)分為模板數(shù)據(jù)(由后端直接填充)和異步數(shù)據(jù)(通過(guò) HTTP 接口),工具的作用就是平滑地進(jìn)行數(shù)據(jù)交互過(guò)渡,降低溝通成本。

名字由來(lái)

在開(kāi)發(fā)前期,后端可能并沒(méi)有開(kāi)始寫(xiě)或者沒(méi)有寫(xiě)完,前端此時(shí)只能通過(guò)本地?cái)?shù)據(jù)模擬實(shí)際數(shù)據(jù)進(jìn)行布局和組件的調(diào)試,一般叫做 mock 數(shù)據(jù)。

待前端寫(xiě)的差不多了,后端可能也差不多了,那么此時(shí)需要聯(lián)調(diào),因?yàn)槁?lián)調(diào)的過(guò)程很可能伴隨著大量的修復(fù)工作,前后端雜糅在一起部署的代價(jià)太高,高效的方式就是通過(guò)代理的方式直接從模擬數(shù)據(jù)切到后端數(shù)據(jù),這里叫 proxy。

如果把 mock 和 proxy 結(jié)合起來(lái),那么就叫 moky !

使用說(shuō)明

項(xiàng)目的 GitHub 里面已經(jīng)簡(jiǎn)單的說(shuō)了下使用方法,不過(guò)我覺(jué)得還是有必要補(bǔ)充點(diǎn)額外的說(shuō)明。

首先,需要強(qiáng)調(diào)的是,moky 側(cè)重點(diǎn)只有 mock 和 proxy,因此可以做到代碼也只有 200 行左右,市場(chǎng)上已經(jīng)有很多人做這方面工作了,而基本都不能滿(mǎn)足我的需求。

使用跟 webpack 很類(lèi)似,全局安裝 npm i moky -g ,只需要一個(gè)配置文件,然后直接運(yùn)行在配置文件 moky.config.js 所在目錄運(yùn)行 moky ,或者通過(guò)參數(shù)指定配置文件路徑 moky -c /path/to/xxx.js

但是,正確使用前一般需要先配置好 moky.config.js,下面針對(duì)配置文件做一個(gè)羅嗦的介紹:

// 這里之所以需要 path,是因?yàn)橄旅娴奈募窂蕉急仨毷墙^對(duì)路徑
var path = require("path");

module.exports = {
  // 本地監(jiān)聽(tīng)端口,運(yùn)行 moky 會(huì)起一個(gè) server
  localPort: 3000,
  
  // 異步數(shù)據(jù)的 mock 目錄路徑
  asyncMockPath: path.join(__dirname, "mock"),
  
  // 同步數(shù)據(jù)的 mock 目錄路徑
  viewsMockPath: path.join(__dirname, "tplMock"),
  
  // 模板所在目錄,如果你是完全前后端分離,沒(méi)有模板,那至少有個(gè) index.html 吧
  // 把這個(gè) index.html 所在的目錄當(dāng)作模板目錄即可
  viewsPath: path.join(__dirname, "views"),
  
  // 這個(gè)并沒(méi)有卵用,如果有 favicon 還是設(shè)置下吧
  faviconPath: path.join(__dirname, "public", "favicon.ico"),
  
  // 這里不要被 js 和 css 誤導(dǎo)了,這里是設(shè)置靜態(tài)資源的路由
  // 注意,其優(yōu)先級(jí)比較高哦,所以不要漏了/多了/跟其它沖突了
  publicPaths: {
    "/css": path.join(__dirname, "public", "css"),
    "/js": path.join(__dirname, "public", "js"),
  },
  
  // 模板引擎的設(shè)置,具體參考 koa-views,moky 已經(jīng)內(nèi)置了幾個(gè)模板引擎,可以直接設(shè)置就用
  // 注意兩點(diǎn):如果選擇 freemarker 一定保證 JAVA_HOME 等設(shè)置是對(duì)的;
  // 如果是純 HTML 頁(yè)面,你隨便選個(gè)模板引擎即可,推薦 nunjucks
  viewConfig: {
    extension: "html",
    map: { html: "nunjucks" },
  },
  
  // 這里為了解決很多 Web 容器采用的 Virtual Host 機(jī)制(一個(gè) IP:PORT 通過(guò)域名對(duì)應(yīng)多個(gè)服務(wù))
  // 由于我們本地啟動(dòng)的可能是 http://localhost:3000,如果有 Virtual Host 機(jī)制則通不過(guò)的
  // 如果設(shè)置了 hostName,在發(fā)送請(qǐng)求前程序會(huì)自動(dòng)替換 Host 頭為 hostName
  hostName: "hacker-news.firebaseio.com",
  
  // 這里是proxy 映射表,在啟動(dòng)的時(shí)候如果是 moky -e dev,異步請(qǐng)求會(huì)自動(dòng)走 dev 對(duì)應(yīng)的 proxy
  // 如果沒(méi)找到對(duì)應(yīng)的,那么默認(rèn)用本地的 mock 數(shù)據(jù)作為異步數(shù)據(jù)
  proxyMaps: {
    dev: "https://hacker-news.firebaseio.com",
    local: "http://localhost:8080",
  },
  
  // 這是頁(yè)面路由的設(shè)置,這里的 key 是路由(URL 里見(jiàn)到的),value 是頁(yè)面的相對(duì)路徑
  // 路徑相對(duì)于 viewsPath , 不用加后綴,viewConfig.extension 指明了
  urlMaps: {
    "/": "index",
    "/page": "page/index",
  },
}

最簡(jiǎn)單的試用就是全局安裝 moky,然后 clone 項(xiàng)目,進(jìn)入 example 目錄,直接運(yùn)行 moky

先看下目錄結(jié)構(gòu):

├── mock
│?? ├── get
│?? │?? ├── test
│?? │?? │?? └── index.json
│?? │?? └── v0
│?? │??     └── item
│?? │??         └── 2921983.json.json
│?? └── post
│??     └── index.json
├── moky.config.js
├── public
│?? ├── css
│?? │?? └── main.css
│?? ├── favicon.ico
│?? └── js
│??     └── main.js
├── tplMock
│?? ├── index.json
│?? └── page
│??     └── index.json
└── views
    ├── index.html
    └── page
        └── index.html

直接運(yùn)行 moky 會(huì)默認(rèn)使用 mock 模式,數(shù)據(jù)流是這樣的:

我們?yōu)g覽器打開(kāi) http://localhost:3000/page

路由會(huì)根據(jù)我們的設(shè)置匹配一遍:靜態(tài)資源 -> 頁(yè)面 -> 異步接口,這里匹配到頁(yè)面就停止了

程序會(huì)去 tplMock/page/index.json 下拿模板數(shù)據(jù),然后填充渲染返回

此時(shí)頁(yè)面里的靜態(tài)資源的會(huì)被首先從 public 下路由

然后會(huì)有個(gè)異步接口 GET v0/item/2921983.json,會(huì)最終被異步處理模塊處理

因?yàn)槲覀儐?dòng)的時(shí)候是 mock 模式,于是會(huì)去 mock/get 文件夾找對(duì)應(yīng)位置的 json 作為本地 mock 數(shù)據(jù)

如果我們是 moky -e dev 啟動(dòng)的,那么 GET v0/item/2921983.json 會(huì)被從 proxyMaps.dev 反代

遺留問(wèn)題

模板數(shù)據(jù)無(wú)法走 proxy 從遠(yuǎn)端獲取

對(duì)第三方登錄/認(rèn)證不友好

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

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

相關(guān)文章

  • 如何更有效率和質(zhì)量地開(kāi)發(fā)Vue項(xiàng)目

    摘要:前言自總結(jié)完了上篇前端工程化的思想,并在全家桶的項(xiàng)目加以實(shí)踐,趁熱給大家總結(jié)一篇如何更有效率與質(zhì)量地開(kāi)發(fā)項(xiàng)目,以及其中踩過(guò)的一個(gè)個(gè)坑。。。 前言 自總結(jié)完了上篇前端工程化的思想,并在vue全家桶的項(xiàng)目加以實(shí)踐,趁熱給大家總結(jié)一篇如何更有效率與質(zhì)量地開(kāi)發(fā)vue項(xiàng)目,以及其中踩過(guò)的一個(gè)個(gè)坑。。。 基于vue-cli的自定義模板(Custom Templates) 小伙伴們的vue項(xiàng)目應(yīng)該都...

    ShevaKuilin 評(píng)論0 收藏0
  • 基于webpack前后分離開(kāi)發(fā)環(huán)境實(shí)戰(zhàn)

    摘要:背景隨著互聯(lián)網(wǎng)應(yīng)用工程規(guī)模的日益復(fù)雜化和精細(xì)化,我們?cè)陂_(kāi)發(fā)一個(gè)標(biāo)準(zhǔn)應(yīng)用的早已開(kāi)始告別單干模式,為了提升開(kāi)發(fā)效率,前后端分離的需求越來(lái)越被重視,前端負(fù)責(zé)展現(xiàn)交互邏輯,后端負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)接口,基本上也成為了我們?nèi)粘m?xiàng)目分工中的標(biāo)配,但是前后端分離 背景 隨著互聯(lián)網(wǎng)應(yīng)用工程規(guī)模的日益復(fù)雜化和精細(xì)化,我們?cè)陂_(kāi)發(fā)一個(gè)標(biāo)準(zhǔn)web應(yīng)用的早已開(kāi)始告別單干模式,為了提升開(kāi)發(fā)效率,前后端分離的需求越來(lái)越被重...

    soasme 評(píng)論0 收藏0
  • 丁香園開(kāi)源接口管理系統(tǒng)

    摘要:致力于解決前后端開(kāi)發(fā)協(xié)作過(guò)程中出現(xiàn)的各類(lèi)問(wèn)題,提高開(kāi)發(fā)效率,對(duì)接口做統(tǒng)一管理,同時(shí)也能為后續(xù)的迭代維護(hù)提供更便捷的方式。丁香園也將努力持續(xù)的做技術(shù)輸出產(chǎn)品輸出,為開(kāi)源社區(qū)做出自己的一份力量。 API Mocker 先貼上項(xiàng)目地址:DXY-F2E/api-mocker 隨著web發(fā)展,前后端分離的演進(jìn),網(wǎng)頁(yè)的交互變的越來(lái)越復(fù)雜。在項(xiàng)目開(kāi)發(fā)過(guò)程中,前后端并行開(kāi)發(fā)時(shí),在涉及到接口的部分,總是...

    mingde 評(píng)論0 收藏0
  • 淺談前mock

    摘要:引言前端開(kāi)發(fā)經(jīng)常需要等待后端的接口,嚴(yán)重影響了開(kāi)發(fā)效率,我們一般采用方式來(lái)避免這個(gè)問(wèn)題??赡軙?huì)涉及到門(mén)技術(shù),分別是服務(wù)端技術(shù)隨機(jī)生成特定格式數(shù)據(jù)的技術(shù)請(qǐng)求轉(zhuǎn)發(fā)請(qǐng)求攔截。 引言 前端開(kāi)發(fā)經(jīng)常需要等待后端的接口,嚴(yán)重影響了開(kāi)發(fā)效率,我們一般采用mock方式來(lái)避免這個(gè)問(wèn)題。本人參考了大量文章,結(jié)合自己的經(jīng)驗(yàn),給出自己在mock上的一些理解。 1. 原理 何為mock,我認(rèn)為mock主要就是通...

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

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

0條評(píng)論

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