UNPKG

cgreact-loader

Version:

CGReact与Webpack配套的loader

73 lines (72 loc) 2.98 kB
module.exports = CGReactProxy; function CGReactProxy(app) { app.get("/cgreact-proxy*", proxyHttpRequest); app.post("/cgreact-proxy*", proxyHttpRequest); } function proxyHttpRequest(request, response) { // 解析请求地址 var url = new URL(request.url.substring(15, request.url.length)); //去掉前面的/cgreact-proxy/ // console.log(url.href); // console.log(url.hostname); // console.log(url.port ? url.port : url.protocol + "默认"); // console.log(url.pathname); // console.log(url.search); // 构造请求头Header var proxyParam = { host: url.hostname, port: url.port, path: url.pathname + url.search, method: request.method, headers: (function () { delete request.headers["host"]; delete request.headers["if-none-match"]; delete request.headers["if-modified-since"]; return request.headers; })() }; // 构造响应方法 var proxyCallBack = function (proxyResponse) { // 构造响应头允许跨域 proxyResponse.headers['Access-Control-Allow-Origin'] = "*"; proxyResponse.headers['Access-Control-Allow-Methods'] = "*"; proxyResponse.headers['Access-Control-Allow-Headers'] = "Content-Type"; // 写入响应头 response.writeHead(proxyResponse.statusCode, proxyResponse.headers); // 写入响应数据 proxyResponse.on("data", function (chunk) { return response.write(chunk); }); proxyResponse.on("end", function () { return response.end(); }); }; var errorCallBack = function (error) { response.writeHead(504); response.end(error.toString()); }; // 根据协议发起不同请求 switch (url.protocol) { case "http:": { // 发起代理请求 var proxyRequest_1 = require("http").request(proxyParam, proxyCallBack); proxyRequest_1.on("error", errorCallBack); // 写入请求数据Payload request.on("data", function (chunk) { return proxyRequest_1.write(chunk); }); request.on("end", function () { return proxyRequest_1.end(); }); break; } case "https:": { // 发起代理请求 var proxyRequest_2 = require("https").request(proxyParam, proxyCallBack); proxyRequest_2.on("error", errorCallBack); // 写入请求数据Payload request.on("data", function (chunk) { return proxyRequest_2.write(chunk); }); request.on("end", function () { return proxyRequest_2.end(); }); break; } default: { // 未知的协议类型 errorCallBack("未知的协议类型"); break; } } }