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

資訊專欄INFORMATION COLUMN

前端的 mock server

lastSeries / 1613人閱讀

摘要:然而扯淡的在前端前端要發(fā)請求,所以每個(gè)請求的都是,而生產(chǎn)環(huán)境服務(wù)器又是。前端方案因?yàn)槲沂窃谛I?,沒辦法了解到大公司的開發(fā)方式??赡芎蠖司腿涡跃筒蛔袷兀敲催@個(gè)前端只能靠來調(diào)整,然而更多的情況是沒辦法調(diào)整的。

在一個(gè)中大型項(xiàng)目中,你不可能一邊寫著前端一邊寫后端。全棧太難 :)

像rails那樣的開發(fā)模式已經(jīng)很不適合當(dāng)前的環(huán)境了。所有的項(xiàng)目都嚷嚷著前后端分離,那就只能這么干

我之前在做大學(xué)狗們的時(shí)候,在mock數(shù)據(jù)這一塊曾經(jīng)特別難受

雖說整個(gè)前后端我都能掌控,但是因?yàn)檎麄€(gè)前端是一個(gè)repo,后端又是一個(gè),我在開發(fā)的時(shí)候又不能開著兩個(gè)編輯器(有一段時(shí)間這么干過),而且十分不想在自己電腦上安裝那么多東西。

一開始的解決方案很扯淡:

后端Mock方案

不想在自己電腦上安裝那就連遠(yuǎn)端服務(wù)器吧。反正學(xué)生優(yōu)惠的Server超級便宜,而且再開個(gè)二級域名沒有任何損失。

說干就干。

在遠(yuǎn)端開發(fā)服務(wù)器上先把后端拉下來,搞數(shù)據(jù)庫。是laravel做的,所以mock數(shù)據(jù)也還是挺輕松的。整個(gè)一套弄下來了。

然后給Nginx加上跨域的header。

好了,到這里服務(wù)端就完成了。

雖然很不舒服,但還是能忍受對吧。然而扯淡的在前端

前端要發(fā)請求,所以每個(gè)請求的url都是http://dev.foo.com/,而生產(chǎn)環(huán)境服務(wù)器又是http://www.bar.com/

我想出了一個(gè)"聰明"的法子:在所有請求前面加上一個(gè)prefix,在dev環(huán)境就設(shè)置成http://dev.foo.com/, 生產(chǎn)環(huán)境就改過來。這樣所有請求的prefix就是個(gè)變量,在release之前替換一下就可以了!

天才!

就像是這樣

// release前修改
const prefix = "http://dev.foo.com/"

// 其他文件中
fetch(`${prefix}/api/users`).then(res => res.json()).then(data => todo(data))

然后我改字符串的時(shí)候就哭了? 如果你愿意讀一下源碼,你會(huì)體會(huì)到我當(dāng)時(shí)崩潰的心情,這里還殘留著這個(gè)方案的痕跡(要改太多地方了)

不過說真的,雖然這套方案問題相當(dāng)大,然而它確實(shí)是有用的,支撐了我好幾個(gè)月。

難以忍受這套方案的同時(shí)我也在尋找好的解決方案。

前端Mock方案

因?yàn)槲沂窃谛I?,沒辦法了解到大公司的開發(fā)方式。在這個(gè)痛點(diǎn)發(fā)生以后就一直關(guān)注這方面的內(nèi)容。

我一直想在webpack-dev-server這邊做個(gè)中間層,把這個(gè)server做成完整后端那種的,包含路由什么的,直接返回json。

因?yàn)橐恢笨紤]其他的事情,一直拖著沒做,另外也覺得webpack這套東西好像也有點(diǎn)兒復(fù)雜,不太愿意碰。

其實(shí)還有個(gè)問題,我相信mock這一塊大公司肯定碰到的比我早,為什么我沒有搜索到這樣的包?是他們不愿意這么做還是有更好的解決方案?

最近總算是找到了個(gè)還算靠譜的一套方案,流程是這樣的:

首先開一個(gè)mock server,只有路由功能,返回假數(shù)據(jù)。

在webpack-dev-server中加上proxy,把對server的請求都轉(zhuǎn)發(fā)給proxy,不存在跨域的東西,可以很逼真的模擬。

這套方案就很棒,完全不用修改請求url。

說干就干:

$ npm install --save faker
$ npm install -g json-server

在項(xiàng)目目錄下創(chuàng)建mock目錄,然后做路由和數(shù)據(jù)

// mock/db.js
"use strict"
const faker = require("faker")

module.exports = function() {
    let data = {
        "activity": [
            {
                id: 0,
                title: faker.lorem.words(),
                img: faker.image.image()
            }
        ]
    }
    return data
}

路由文件,主要把對/api/*的請求轉(zhuǎn)到/*,主要是簡單一些

{
    "/api/": "/"
}

然后把這個(gè)mock server 起一下吧

$ json-server mock/db.js --routes mock/routes.json --port 9999

剩下的是webpack那邊的配置了。核心是這些:

const config = require("./webpack.config")
config.devServer = {
    hot: true,
    inline: true,
    proxy: {
        "/api/*": {
            target: "http://127.0.0.1:9999",
            secure: false
        }
    }
}
module.exports = config

好了,配置也可以了。

$ webpack-dev-server --process --colors --hot --inline --devtool eval --config webpack.dev.config.js

所有的事情都做完了,只剩下測試了

找個(gè)入口文件測試一下:

fetch("/api/activity").then(res => res.json()).then(data => console.log(data))

ok。把我折騰了這么幾個(gè)月的前后端總算是徹底分開了

問題

這套流程的最大問題在于json-server這么個(gè)東西,因?yàn)槭羌兇獾?strong>RESTful的server。同樣是上面的配置為例:

GET /api/activity
POST /api/activity {title: "foo", image: "/foo.jpg"}
PUT /api/activity/1 {title: "bar", image: "/bar.jpg"}
DELETE /api/activity/1

對RESTful有了解就明白了,分別對應(yīng)的是獲取, 創(chuàng)建, 更新, 刪除操作

當(dāng)然還有更多的json-server的設(shè)置,比如查詢,關(guān)系什么的,底下我會(huì)給鏈接。

這些東西可以說設(shè)計(jì)是很不錯(cuò)的。然而也是問題。

老系統(tǒng)完全不能用?;蛘咴O(shè)計(jì)不夠好的系統(tǒng)根本不能用。

可能后端就任性!就不遵守REST API,那么這個(gè)前端mock只能靠routes.json來調(diào)整,然而更多的情況是沒辦法調(diào)整的。

所以啊,這個(gè)mock server方案對后端要求很嚴(yán)格

References

你是如何構(gòu)建 Web 前端 Mock Server 的?

JSON Server

faker.js

Egghead.io free video tutorial - Creating demo APIs with json-server

原文:前端的 mock server

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

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

相關(guān)文章

  • 淺談前端mock

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

    elina 評論0 收藏0
  • 使用json-server來模擬REST API

    摘要:官方地址使用可全局安裝,也可針對項(xiàng)目安裝??捎瞄_啟服務(wù)。數(shù)據(jù)文件格式如下讓讀書點(diǎn)燃夢想地點(diǎn)濱江星耀城讓讀書點(diǎn)燃夢想地點(diǎn)濱江星耀城仿京東購物車仿京東購物車修改里面的命令。 在前端開發(fā)中,如果后端接口還沒有提供,前端拿不到數(shù)據(jù),可能就沒法繼續(xù)寫一些交互行為的代碼。這一問題可通過json-server來很好地解決。本文主要講如何將json-server和webpack進(jìn)行整合,基于vue-w...

    smartlion 評論0 收藏0
  • justreq與mock.js組合,快速打造高質(zhì)量Mock Server

    摘要:而則是主要用于接口緩存的一款。初始化完成后,將在當(dāng)前目錄生成文件。其它未在規(guī)則中的請求,將直接代理并緩存下來,而不進(jìn)行轉(zhuǎn)發(fā)。每條記錄包含和兩個(gè)屬性,并且也是隨機(jī)自動(dòng)生成的。 概述 搜到這篇文章之前,相信你已對Mock Server及mock.js有一定的了解。簡單概括,Mock Server即模擬服務(wù)器,用于模擬后端api服務(wù)。mock.js是國內(nèi)的高云開發(fā)的一款json數(shù)據(jù)生成器,主...

    Awbeci 評論0 收藏0

發(fā)表評論

0條評論

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