Noodjs 代理的实现:手动封装代理与http-proxy-middleware插件实现代理
Posted Island
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Noodjs 代理的实现:手动封装代理与http-proxy-middleware插件实现代理相关的知识,希望对你有一定的参考价值。
手动封装代理
在服务里面封装一个http请求,发向被代理的服务器,将被代理服务器返回的数据,发送给客户端,承担一个中间桥梁作用,实现代理。
/*
创建一个代理服务器,给发送过来的请求发送响应拉钩的服务器数据
http://localhost:8099/listmore.json?pageNo=2&pageSize=15
https://m.lagou.com/listmore.json?pageNo=2&pageSize=15
req.url拿到端口后面的数据
https.get向拉钩发送请求,把这个请求的响应数据发送给客户端,完成代理
*/
const http = require('http');
const https = require('https');
const baseUrl = "https://m.lagou.com";
http.createServer((request, response) => {
let url = baseUrl + request.url;
https.get(url, res => {
let err;
const { statusCode } = res;
let rawData = "";
// console.log("res.headers",res.headers["content-type"]);
if (!statusCode === 200) err = new Error("服务器响应失败");
if (!/application/json|image/x-icon/.test(res.headers["content-type"])) err = new Error("数据格式不正确");
if (err) {
console.log(err);
res.resume();
return;
}
res.on("data", chunk => {
rawData += chunk;
});
res.on("end", () => {
try {
//设置编码集
response.setHeader('content-type','application/json;chartset=utf-8');
//设置跨域,一般不建议为*,会有安全问题,这里随便设置为百度,百度的一二级域名都能访问
response.setHeader('access-control-allow-origin','*.baidu.com');
response.write(rawData);
response.end();
} catch (e) {
console.log(e);
}
});
});
}).listen(8099, () => {
console.log("server start at 8099");
});
http-proxy-middleware插件实现代理
用的时候需要给proxy传进一个对象参数param,这个对象有三个属性
- target:baseurl,//是需要代理服务的站点url,
- changeOrigin:true,//是否支持跨域
- pathWrite:{regexstr : replacestr //regex是正则字符串,replacestr将正则匹配到的字符串替换为replacestr}
在httpserver里面将req和res当作形参传给proxy(param)的返回值并return,实现代理
/*
使用第三方模块 http-proxy-middleware完成代理
http://localhost:8099/fetch/listmore.json?pageNo=2&pageSize=15
https://m.lagou.com/listmore.json?pageNo=2&pageSize=15
http-proxy-middleware
const proxy = require('http-proxy-middleware');
proxy(obj)
只需要一个obj对象,
obj{
target:vaseurl,//是需要代理服务的站点url,
changeOrigin:true,//是否支持跨域
pathWrite:{
regexstr : replacestr //regex是正则字符串,replacestr将正则匹配到的字符串替换为replacestr
}
}
*/
const http = require('http');
const proxy = require('http-proxy-middleware');
const baseUrl = "https://m.lagou.com";
http.createServer((req, res) => {
if (/fetch/.test(req.url)) {
var param = {
target: baseUrl,
changeOrigin: true,
pathRewrite: {
'^/fetch': ""
}
}
var proxyDemo = proxy(param);
return proxyDemo(req, res);
} else {
res.end();
}
}).listen(8099, () => {
console.log("server start at 8099");
});
以上是关于Noodjs 代理的实现:手动封装代理与http-proxy-middleware插件实现代理的主要内容,如果未能解决你的问题,请参考以下文章