先放上已经打包好的地址

https://gitee.com/Amengxiaoya/node-proxy.git  切记 proxyConfig.json 设置代理 ip为自己的ipv4地址 (cmd+ipconfig)

再放上源码地址

https://gitee.com/Amengxiaoya/node-re-quest.git  有点小乱,我测试用的(该项目只用到一个proxy.js文件)。

下载后第一步 `cnpm install` 然后node的pkg库的打包命令 `pkg -t node14-win proxy.js`

主要的proxy.js文件源码

//代理
const querystring = require('querystring');
const util = require('util');
const http = require('http');
const request = require('request');
const formidable = require("formidable");
const path = require("path");
const fs = require("fs");
const FormData = require('form-data') const {
hostIp,
apiPort,
redirUrl,
customQuery,
consoleConfig:{apiSuc,apiFail,apiMsg,removeFile,removeMsg}
} = JSON.parse(fs.readFileSync(process.cwd()+'/proxyConfig.json','utf-8')); function saveFiles(req,options,callback){
const promiseCase=[];
var form = new formidable.IncomingForm();
form.keepExtensions = true;
form.multiples = true;
form.uploadDir = path.join(process.cwd());
form.parse(req, function(err, fields, files) {
//const formData = new FormData()
options.formData = {};
for (let key in fields) {
//formData.append(key, fields[key])
options.formData[key]=fields[key]
}
for (let key in files) {
let newFilepath='Tmp-'+files[key].originalFilename;
fs.renameSync(files[key].newFilename,newFilepath)
//formData.append(key, fs.createReadStream('./'+newFilepath))
options.formData[key]=fs.createReadStream('./'+newFilepath,{highWaterMark:9999999})
new Promise((rev)=>{
promiseCase.push(rev)
}).then(()=>{
fs.unlink('./'+newFilepath,function(err){
if(removeFile==="0"){
console.log(err?'清理临时文件异常':'删除临时图片成功');
}
if(removeMsg==="0"&&err){
console.log(err);
}
})
})
}
request(options, function(error, response, body){
callback(error, response, body)
for (let item of promiseCase) {
item()
}
promiseCase.splice(0,)
})
//pipe(fs.createWriteStream(files.file.originalFilename))//formData.pipe()
})
} //创建代理服务
const httpServer = http.createServer((req, res) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Credentials', true);
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', '*');
if (req.method == 'OPTIONS') {
// 回复OPTIONS
res.end('');
return
}
/* 正式代理 */
let options = {
method: req.method,
header:req.headers,
encoding:null
};
if(customQuery!=='-1'){
options.headers={};
for (let key in customQuery) {
options.headers[key]=req.headers[customQuery[key]]
}
}
options.url = redirUrl + req.url
function callback(error, response, body) {
res.setHeader('Content-Type', response.headers['content-type']);
res.statusCode = response.statusCode
if (!error) { //删除 && response.statusCode === 200
if(apiSuc==="0"){
console.log(req.url + '成功代理')
}
res.end(body);
} else {
if(apiFail==="0"){
console.log(req.url + '请求异常')
}
if(apiMsg==="0"){
console.log(error)
}
res.end("{'code':-1,'msg':'node请求异常'}");
}
}
if (options.method === 'GET') {
request(options, callback);
}else if (options.method === 'POST') {
if(/^multipart\/form-data/.test(req.headers['content-type'])){
saveFiles(req,options,callback)
}else{
// 定义了一个post变量,用于暂存请求体的信息
var post = '';
// 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
req.on('data', function(chunk) {
post += chunk;
});
req.on('end', function() {
options.body=post
request(options, callback);
});
}
}
}).listen(apiPort, hostIp, () => {
console.log('开启代理---' + hostIp + ':' + apiPort + '---为---' + redirUrl,'by#2585266774@qq.com#')
});

简单的html js node 前端直接使用反向代理软件的更多相关文章

  1. node插件http-proxy实现反向代理

    最近自己动手做了一个微信小程序,是直接买的腾讯云的小程序解决方案,怎么说那,用起来还是会遇到不少问题的,不过在交流群里还是会有很多人帮助你的. 闲话少说,因为要再做一个别的服务,就想直接用这台小程序的 ...

  2. 前端通过Nginx反向代理解决跨域问题

    在前面写的一篇文章SpringMVC 跨域,我们探讨了什么是跨域问题以及SpringMVC怎么解决跨域问题,解决方式主要有如下三种方式: JSONP CORS WebSocket 可是这几种方式都是基 ...

  3. 前端使用 Nginx 反向代理彻底解决跨域问题

    引入网址https://blog.csdn.net/larger5/article/details/81286324 1.请求后端数据失败 代码: <!DOCTYPE html> < ...

  4. 搞懂:前端跨域问题JS解决跨域问题VUE代理解决跨域问题原理

    什么是跨域 跨域:一个域下的文档或脚本试图去请求另一个域下的资源 广义的跨域包含一下内容: 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源请求(内部的引用,脚本script,图片img,fr ...

  5. node项目发布+域名及其二级域名配置+nginx反向代理+pm2

    学习node的时候也写了一些demo.但是只是限于本地测试,从来没有发布.今天尝试发布项目. 需要准备的东西 node 项目:为了突出重点,说明主要问题.我只是拿express 写了很简单的demo. ...

  6. 一统江湖的大前端(2)—— Mock.js + Node.js 如何与后端潇洒分手

    <一统江湖的大前端>系列是自己的前端学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类好玩的js库,不定期更新.如果你对前端的理解还是写写页面绑绑事件,那你真的是有 ...

  7. vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结

    vue—你必须知道的   目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...

  8. 使用webpack+vue.js构建前端工程化

    参考文章:https://blog.csdn.net/qq_40208605/article/details/80661572 使用webpack+vue.js构建前端工程化本篇主要介绍三块知识点: ...

  9. HTML、CSS、JS在前端开发中都扮演怎样的角色

    前端开发,需要经常接触 HTML.DOM.CSS.JS等,那么HTML.CSS.JS在前端开发中究竟扮演怎样的角色呢?以下是个人的一些观点... HTML:超文本标记语言 (Hyper Text Ma ...

随机推荐

  1. window10教育版激活失败

    问题 输入完key之后显示无法连接服务器 再次输入密钥无效,而且家庭版密钥激活也没了 使用命令行消除过去的key,使用新的教育版key后,显示运行在运行microsoft windows 非核心版本的 ...

  2. Collection的使用

    常用方法 Modifier and Type Method and Description boolean add(E e) 确保此集合包含指定的元素(可选操作). boolean addAll(Co ...

  3. JDK原子操作类

    在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型.原子更新数组.原子更新引用和原子更新属性(字段).Atomic包里的类基本都是使用Unsafe实现的包装类. ...

  4. Solon 1.6.18 发布,轻量级应用开发框架

    关于官网 千呼万唤始出来: https://solon.noear.org .整了一个月多了...还得不断接着整! 关于 Solon Solon 是一个轻量级应用开发框架.支持 Web.Data.Jo ...

  5. golang中的标准库flag

    Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单. os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数. ...

  6. 【重构前端知识体系之HTML】HTML5给网页音频带来的变化

    [重构前端知识体系之HTML]HTML5给网页音频带来的变化 引言 音乐播放,相信大家都很熟悉,但是早在之前的音乐播放之前,你的浏览器会问你,是否下载flash插件.然而现在,估计一些年轻的开发者都不 ...

  7. 一:linux安装nginx

    目录 1.yun安装 2.二进制安装 3.编译安装 1.yun安装 nginx官网:https://nginx.org/ [root@web01 ~]# vim /etc/yum.repos.d/ng ...

  8. 优化.NET 应用程序 CPU 和内存的11 个实践

    https://michaelscodingspot.com/cpu-bound-memory-bound/ 优化.NET 应用程序 CPU 和内存的11 个实践 凡事都有其限度,对吧?汽车只能开这么 ...

  9. Idea内存设置idea.vmoptions无效的解决办法

    原因:貌似是因为maven的问题 解决办法 结果

  10. 「SHOI2006」有色图

    首先发现这题虽然是边的置换,但是是由点的置换所造成的,并且发现点置换对应的所有边置换和置换操作构成置换群. 由于颜色可以全选,那么根据 Polya 定理,答案为: \[|X / G| = \frac{ ...