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");
});
分类:
前端技术栈 / Nodejs
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端