鍍金池/ 問答/Java  PHP  HTML/ vue開發(fā)前后端分離前端如何調(diào)用后端接口?

vue開發(fā)前后端分離前端如何調(diào)用后端接口?

對前后端分離如何調(diào)用接口這塊感覺一直沒怎么弄明白,但又不知如何說明,下面我模擬一個項目說明我的問題。

現(xiàn)在我們有個項目,前端用vue開發(fā),后端php開發(fā),后端測試地址為:localhost:8181,項目服務(wù)器地址是:www.cocoy.com。在開發(fā)階段模擬數(shù)據(jù)(userdata.json)是放在static文件夾里,而在后端與userdata.json對應(yīng)的文件userdata.php是在abc文件夾里的。

我的問題是:在開發(fā)階段讀取數(shù)據(jù)是這樣的:get("../static/userdata.json"),那在測試階段是不是要改成:get("http://localhost:8181/abc/userdata.php")。在生產(chǎn)環(huán)境把數(shù)據(jù)傳到服務(wù)器后又該怎么讀取數(shù)據(jù),難道是:get("http://www.cocoy.com/abc/userdata.php")?

還是說傳到服務(wù)器后前端和后端的文件分別放在不同的文件夾里,然后前端調(diào)用后端接口直接這樣:get("../后端文件夾/abc/userdata.php")?如果是這樣的話是不是只要將vue的設(shè)置文件里將static名稱改一下就可以了?

對這塊一直沒弄明白,希望大佬能解釋透徹一點,感激不盡?。?!

回答
編輯回答
苦妄

1.你說的在不同的環(huán)境下請求不同的api是對的
2.一般來說不管開發(fā)環(huán)境還是測試環(huán)境還是線上環(huán)境,url的路徑都是一個,只是前綴不同,這個前綴可以根據(jù)打包環(huán)境的變化來自適應(yīng)
3.你現(xiàn)在的開發(fā)環(huán)境的mock是mock了json,可以在dev-server里啟動mock服務(wù)器,mock請求

2018年3月23日 14:12
編輯回答
毀憶

axios可以解決你的問題
開發(fā)和生產(chǎn)階段配置不同的接口就行了

2017年9月25日 02:07
編輯回答
瘋子范

不對啊,你本地mock數(shù)據(jù)的時候,注意要弄成http的形式啊,本地webpack最好是是用express的中間件方式進行dev開發(fā),這樣,你就可以寫express的接口了,寫個假的數(shù)據(jù)接口,你本地直接請求這個接口就好了,像你那樣直接請求本地文件是不對的,那變成file協(xié)議了。
還有,你注意你需要指定個baseUrl,全局請求從一個地方引入這個baseUrl,這樣,改一個地方就OK了。

2018年3月28日 07:51
編輯回答
執(zhí)念

你可以在config文件夾中的index.js中設(shè)置代理服務(wù)器,然后在ajax的時候,寫上/xxx/xx(那個文件夾中的哪個接口路徑就行了)

2018年7月2日 06:09
編輯回答
朽鹿

你應(yīng)該先了解一下 axios

2018年7月21日 12:40
編輯回答
入她眼

你測試地址http://localhost:8181/abc/userdata.php說明你本機就有接口,那你是否清楚get("../static/userdata.json")是為了什么???
代碼里面不用改,config目錄里面dev.env.js和prod.env.js分別定義后端接口根域名即可

2017年9月27日 08:59
編輯回答
命多硬

先定義接口文檔, 如

用戶列表
地址 /api/users
請求方式 GET
請求參數(shù) 類型 是否必填 說明
type int N 用戶類型
name string N 用戶名稱
...
響應(yīng)結(jié)果 類型 格式 說明
ret int 200 登錄成功
int 201 登錄失敗
msg string 請求結(jié)果信息
total int 滿足條件的數(shù)據(jù)條數(shù)
userList Array<userInfo> 用戶列表
userInfo 字段 類型 格式 說明
username string 用戶名稱
id string 用戶id
...

eg.
請求JSON:

{
    "name": "wanghaiyang",
    "type": 1
}

響應(yīng)JSON:

{
    "ret": 200,
    "msg": "success",
    "userList": [
        {
              "username": "wanghaiyang",
              "id": "12345676543"
        }
        ...
    ],
    "total": 1000
}

如果部署在同一臺服務(wù)器, 前端文件放在 Web服務(wù)器根目錄, 直接 get(/api/users) 接口就應(yīng)該返回對應(yīng)的 json 數(shù)據(jù), 跟后臺配置相關(guān), 不管你 php 文件放在何處

2017年12月15日 18:21
編輯回答
荒城

如果是后端要你 根據(jù)文件夾訪問。那你想改動不大的話 盡量還是和后端保持一致。
但問題是,看起來 你本地的json 只是你想mock一下數(shù)據(jù)?

2017年11月17日 21:29
編輯回答
故林

經(jīng)過仔細琢磨終于搞清楚是怎么弄的了,記錄在這里以備不時之需,如果有什么錯誤希望大家指正。

現(xiàn)在假設(shè)項目后端接口地址:192.168.0.15/abc/data.php,打開config/index.js,設(shè)置proxyTable屬性:

    proxyTable: {
      '/abc': {
        target: 'http://192.168.0.15', // 接口的域名
        // secure: false,  // 如果是https接口,需要配置這個參數(shù)
        changeOrigin: true, // 如果接口跨域,需要進行這個參數(shù)配置
        pathRewrite: {
          '^/abc': '/abc'
        }
      }
    }

注意,上面代碼中abc不是隨便起的名字,它和后端接口地址的文件夾要一致,這樣當(dāng)你打包的時候就不會出錯。

然后用axios引用接口:axios("/abc/data.php")。這樣在開發(fā)環(huán)境中就可以直接引用后端接口。npm run build打包后將dist里的文件復(fù)制到后端根目錄中,不需要更改任何代碼直接就可以調(diào)用后端abc/data.php接口。

2017年9月27日 03:03