1、本段代码用于解决前后端分离过程中产生的跨域问题。原理上是使用代理转发。使用nodejs语法编写,需要运行在nodejs环境下。
2、使用方法
1、普通ajax请求的url需要改成代码中监听的路由和端口。
2、需要在ajax请求中添加额外添加2个参数,一,baseUrl真实访问接口的host地址;二,pathUrl需要访问的接口的path地址。
const url = require('url');
const http = require('http');
const https = require('https'); // cnode是https协议
//导入querystring模块(解析post请求数据)
var querystring = require('querystring');
const server = http.createServer((req, res) => {
//var params = req.url.toString(1, req.url.length);
//var params = url.parse(req.url, true).query;
var data = '';
if (req.method == "GET") {
data = url.parse(req.url, true).query;
data = JSON.stringify(data);
let opt = {
hostname: '',
method: req.method,
path: '',
headers: {
"Content-Type": 'application/json',
"Content-Length": data.length
}
}
if(data){
opt.hostname = JSON.parse(data).baseUrl;
opt.path = JSON.parse(data).pathUrl;
}
let body = '';
let breq = https.request(opt, function (bres) {
bres.on('data', function (data) {
body += data;
}).on('end', function () {
res.writeHead(200, {
'Access-Control-Allow-Origin': '*',
"Access-Control-Allow-Methods": "*",
"Access-Control-Allow-Headers": "Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,X-URL-PATH,x-access-token"
})
res.end(body);
});
}).on('error', function (e) {
console.log("error: " + e.message);
})
breq.write(data);
breq.end();
} else {
req.on('data',function(r){
data += r;
})
req.on('end', function () {
var opt = {
hostname: '',
method: req.method,
path: '',
headers: {
"Content-Type": 'application/json',
"Content-Length": data.length
}
}
if(data){
opt.hostname = JSON.parse(data).baseUrl;
opt.path = JSON.parse(data).pathUrl;
}
let body = '';
let breq = https.request(opt, function (bres) {
bres.on('data', function (data) {
body += data;
}).on('end', function () {
res.writeHead(200, {
'Access-Control-Allow-Origin': '*',
"Access-Control-Allow-Methods": "*",
"Access-Control-Allow-Headers": "Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,X-URL-PATH,x-access-token"
})
res.end(body);
});
}).on('error', function (e) {
console.log("error: " + e.message);
})
breq.write(data);
breq.end();
})
}
}).listen(3000, '127.0.0.1');
console.log('监听 127.0.0.1:3000,服务已启动');
