webpack的proxy能夠用來代理跨域問題,嘗試了很久終於沒有踩坑了:html
簡單的後端返回數據代碼: server.jsnode
var http = require('http'); var url = require('url'); var createServer = http.createServer(onRequest); var data_list=[ {name:"liuhf1",age:18,is_show:true}, {name:"海龍s",age:10,is_show:true}, {name:"丁丁當當",age:18,is_show:true}, {name:"沉魚落雁",age:34,is_show:true}, {name:"小喬流水",age:19,is_show:true}, {name:"namsss",age:12,is_show:false}, {name:"liuhf1",age:18,is_show:true}, ] function onRequest(request, response) { response.writeHead(200, { // 'Content-Type': 'text/plain', 'Content-Type': 'application/json', // 'Access-Control-Allow-Origin': '*', 註釋掉這一行; 這個原本就容許跨域的: 'content-type':'text/html;charset="utf-8' }); var str = url.parse(request.url, true).query; console.log(str); if(str.test=='ajax'){ response.write(JSON.stringify(data_list)); response.end(); } if(str.test=='ajax1'){ var obj={}; obj["query"]=str; obj["pathname"]=url.parse(request.url, true).pathname; console.log(obj); var obj1=JSON.stringify(obj); response.write(obj1); response.end(); } } createServer.listen(8087); console.log('Server running at http://127.0.0.1:8087/');
本地安裝node後,cmd到文件的目錄,運行一下代碼: node server.js(這個文件在哪一個目錄並不重要.)webpack
webpack --devServer配置web
//服務器啓動目錄; devServer: { contentBase: './dist', hot: true, // host:'1ocalhost', port: 8586, // compress:true, //解決跨域 proxy: { '/api': { target: 'http://localhost:8087', pathRewrite: { '^/api': '' }, changeOrigin: true, secure: false, // 接受 運行在 https 上的服務 } } },
客戶端的js:ajax
function ajax() { $.ajax({ url: '/api', dataType: 'json', // contentType:"application/json", type: 'get', data: { test: 'ajax', }, success: function (res) { var data=res; console.log(data); var str=""; // $("#list").html(template("list_template",data)); data.forEach(function(item,key){ str+="<li class="+item.is_show+">"+item.name+"</li>" }); $("#list").html(str) } }) };
寫一個事件去調用這個函數就能夠了:json
這裏須要注意了:devServer中的api配置前的 / 不能少,文中標記紅色的地方須要一致,否則會報404錯誤:後端
要麼這樣簡單: devServer.proxy中的api留空(即 url('/') ): $.ajax 中的請求根據業務需求想寫啥就寫啥....api
$.ajax中的 url必需要至少有一個/xxx的結構:否則返回的是本地端口的response;跨域
就是就是說,$.ajax ({ url:"/xxx /xxx / xxx"});至少保留一個/xxx,固然業務上後端的數據確定有一個的..沒有也能夠配置;服務器