原理:
開發環境下的跨域:在node.js上實現請求轉發,vue前端通過axios請求到node.js上,node.js將請求轉發到后端,反之.響應也是,先到node.js上,然后轉發vue-cil項目上.
需要在根目錄下新建文件vue.config.js.
vue.config.js:
vue.config.js
是一個可選的配置文件,如果項目的 (和 package.json
同級的) 根目錄中存在這個文件,那么它會被 @vue/cli-service
自動加載。你也可以使用 package.json
中的 vue
字段,但是注意這種寫法需要你嚴格遵照 JSON 的格式來寫。
devServer.proxy
-
Type:
string | Object
如果你的前端應用和后端 API 服務器沒有運行在同一個主機上,你需要在開發環境下將 API 請求代理到 API 服務器。這個問題可以通過
vue.config.js
中的devServer.proxy
選項來配置。
在一個vue文件中export const可以有多個,但是export default只有且僅有一個
具體流程:
一般前端訪問接口通過axios實現,可以對請求進行整體的封裝,返回一個配置好的axios對象,也可以對直接調用axios的具體方法.
axios相關的學習文檔:http://www.axios-js.com/docs/
axios({ // `url` 是用於請求的服務器 URL url: '/user', // `method` 是創建請求時使用的方法 method: 'get', // 默認是 get // `baseURL` 將自動加在 `url` 前面,除非 `url` 是一個絕對 URL。 // 它可以通過設置一個 `baseURL` 便於為 axios 實例的方法傳遞相對 URL baseURL: 'https://some-domain.com/api/', // `transformRequest` 允許在向服務器發送前,修改請求數據 // 只能用在 'PUT', 'POST' 和 'PATCH' 這幾個請求方法 // 后面數組中的函數必須返回一個字符串,或 ArrayBuffer,或 Stream transformRequest: [function (data) { // 對 data 進行任意轉換處理 return data; }], // `transformResponse` 在傳遞給 then/catch 前,允許修改響應數據 transformResponse: [function (data) { // 對 data 進行任意轉換處理 return data; }], // `headers` 是即將被發送的自定義請求頭 headers: {'X-Requested-With': 'XMLHttpRequest'}, // `params` 是即將與請求一起發送的 URL 參數 // 必須是一個無格式對象(plain object)或 URLSearchParams 對象 params: { ID: 12345 }, // `paramsSerializer` 是一個負責 `params` 序列化的函數 // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/) paramsSerializer: function(params) { return Qs.stringify(params, {arrayFormat: 'brackets'}) }, // `data` 是作為請求主體被發送的數據 // 只適用於這些請求方法 'PUT', 'POST', 和 'PATCH' // 在沒有設置 `transformRequest` 時,必須是以下類型之一: // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams // - 瀏覽器專屬:FormData, File, Blob // - Node 專屬: Stream data: { firstName: 'Fred' }, // `timeout` 指定請求超時的毫秒數(0 表示無超時時間) // 如果請求話費了超過 `timeout` 的時間,請求將被中斷 timeout: 1000, // `withCredentials` 表示跨域請求時是否需要使用憑證 withCredentials: false, // 默認的 // `adapter` 允許自定義處理請求,以使測試更輕松 // 返回一個 promise 並應用一個有效的響應 (查閱 [response docs](#response-api)). adapter: function (config) { /* ... */ }, // `auth` 表示應該使用 HTTP 基礎驗證,並提供憑據 // 這將設置一個 `Authorization` 頭,覆寫掉現有的任意使用 `headers` 設置的自定義 `Authorization`頭 auth: { username: 'janedoe', password: 's00pers3cret' }, // `responseType` 表示服務器響應的數據類型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream' responseType: 'json', // 默認的
................
})
根目錄下新建vue.config.js
配置文件:

devServer.proxy的學習文檔:https://cli.vuejs.org/zh/config/#css-loaderoptions
module.exports = { devServer: { proxy: { '/api': { target: '<url>', ws: true, changeOrigin: true }, '/foo': { target: '<other_url>' } } } } && module.exports = { devServer: { proxy: 'http://localhost:4000' } }
proxy根本不能解決跨域,最終要跨域還是要后端配合。proxy只是前端在開發的時候,方便開發使用的東西而已,打包后就無效了。
通過后端接口調用:
參考博客:
https://blog.csdn.net/csdn_chengpeng/article/details/89921958
遇到的問題:
這里是我vue.config.js里面的代碼的問題,屬性拼寫錯誤.
這里是我傳了字符串 過去給axios的data屬性.
這個應該是代碼沒寫對,沒找的問題,后來粘貼的別人的解決了.