;

npm install –global shuji shuji file.js.map -o folder 链接:https://www.npmjs.com/package/shuji

Sourcemap还原出源文件 2023年6月8日
;

npm i express npm i multer const express = require("express"); const multer = require("multer"); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, ‘uploads/’) }, filename: function (req, file, cb) { var fileFormat = (file.originalname).split("."); cb(null, file.fieldname + ‘-‘ + Date.now() + "." + fileFormat[fileFormat.length – 1]); } }) const upload = multer({ storage: storage }); const app = express(); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.post("/upload_f…

nodejs文件上传中间件multer 2023年6月2日
;

指定语言;不然可能引起一些不必要的bug。 # 记得指定为对应的语言; moment.locale(‘zh-cn’); 获取时间戳 # 精确到毫秒 moment().valueOf() ## 1584182611042 ;返回值为数值类型 moment().format(‘x’) ## 返回值为字符串类型 # 精确到秒 moment().unix() ## 1584182618 精确到秒 返回值为数值类型 moment().format(‘X’) ## 返回值为字符串类型 生成指定时间的moment moment("1995-12-25"); # 带格式 # 解析器会忽略非字母和数字的字符,因此以下两个都将会返回相同的东西。 moment("12-25-1995", "MM-DD-YYYY"); moment("12/25/1995", "MM-DD-YYYY"); 获取对象 moment().toObject(); # 返回一个包括:年、月、日、时、分、秒、毫秒的对象 # { years: 2020 months: 2 date: 14 hours: 18 minutes: 47 seconds: 56 milliseconds: 526 }…

moment的高频用法总结 2023年5月2日
;

可能有信息敏感的同学已经了解到:Lodash 库爆出严重安全漏洞,波及 400万+ 项目。这个漏洞使得 lodash “连夜”发版以解决潜在问题,并强烈建议开发者升级版本。 我们在忙着“看热闹”或者“”升级版本”的同时,静下心来想:真的有理解这个漏洞产生的原因,明白漏洞修复背后的原理了吗? 这篇短文将从原理层面分析这一事件,相信“小白”读者会有所收获。 漏洞原因 其实漏洞很简单,举一个例子:lodash 中 defaultsDeep 方法, _.defaultsDeep({ ‘a’: { ‘b’: 2 } }, { ‘a’: { ‘b’: 1, ‘c’: 3 } }) 输出: { ‘a’: { ‘b’: 2, ‘c’: 3 } } 如上例,该方法: 分配来源对象(该方法的第二个参数)的可枚举属性到目标对象(该方法的第一个参数)所有解析为 undefined 的属性上 这样的操作存在的隐患: const payload = ‘{"constructor": {"prototype": {"toString": true}}}’ _.defaultsDeep({}, JSON.parse(payload)) 如此一来,就触发了原型污染。原型污染是指: 攻击者通过某种手段修改 JavaSc…

Lodash 严重安全漏洞背后你不得不知道的 JavaScript 知识 2023年4月27日
;

主要介绍微信开发者工具如何编译小程序代码,如何实现小程序模拟器以及如何调试小程序。 1 简介 虽然在开发语言层面小程序与传统的网页差别不大:是使用JavaScript 脚本语言编写逻辑代码、使用类似于HTML的WXML来描述页面的结构、使用类似于CSS的WXSS来描述节点的样式,但是由于小程序渲染和逻辑分离的运行机制与传统的网页存在差异,所以无法使用传统的网页的开发调试工具,因此我们使用小程序开发生态一站式IDE——微信开发者工具。开发者可以借助微信开发者工具完成小程序的代码开发、编译运行、界面和逻辑调试、真机预览和提交发布版本等功能。 微信开发者工具 微信开发者工具是一个基于nw.js ,使用node.js、chromium以及系统API来实现底层模块,使用React、Redux等前端技术框架来搭建用户交互层,实现同一套代码跨Mac和Windows 平台使用。 微信开发者工具底层框架 2 代码编译 微信开发者工具和微信客户端都无法直接运行小程序的源码,因此我们需要对小程序的源码进行编译。代码编译过程包括本地预处理、本地编译和服务器编译。为了快速预览,微信开发者工具模拟器运行的代码只经过本地预处理、本地编译,没有服务器编译过程,而微信客户端运行的代码是额外经过服务器编译的。 1 编译WXML WXML(WeiXin Markup Langua…

深入了解-微信开发者工具 2023年4月23日
;

编辑导语:无论是交换设计师还是产品经理,在设计产品功能时都会优先考虑功能简化和体验优化,从而陷入综合成本过高的困境。本篇作者给我们介绍的复杂度守恒定律,或许能平衡一下交互设计上的复杂度来解决这个困境,一起来看一下。 一、什么是「复杂度守恒定律」 「复杂度守恒定律」(Law of conservation of complexity)由Larry Tesler 于1984年提出,所以也被称之为「泰斯勒定律」(Tesler’s Law)。关于Tesler 的一个热知识是,UI菜单中常见的剪切和粘贴功能,最早是Tesler 在施乐之星中 Smalltalk 这一应用中实现的。 言归正传,定律认为: 无论在产品开发环节还是在用户与产品的交互环节,其内在的复杂度都有一个临界值,到达临界值后就不能再简化了,你唯一能做的就是将固有的复杂性从一个地方移动到另外一个地方。 例如现实生活中,购物这个环节中,选商品这一动作必须要做的是选择商品、加入购物车或直接付款。但是如何快速的选择到商品就是可转移到复杂度,根据用户的关键词选择还是系统猜你喜欢。 二、「复杂度守恒定律」的应用案例 1.操作页面和用户的复杂度转移 无论是购物类、社交类、应用类(银行、税务等)的APP,大家应该都会发现底部会有常用的切换的图标(例如:首页、消息、我的),这些在使用过程中必然会应用到的功…

追求用户体验的路上,来了解一下「复杂度守恒定律」 2023年3月17日

“任何事物都具有其固有的复杂性,无法简化”。 泰斯勒定律(Tesler’s Law)由Larry Tesler于1984年提出,也称「复杂度守恒定律」。 该定律认为:每一个过程都有其固有的复杂性,存在一个临界点,超过了这个点过程就不能再简化了,你只能将固有的复杂性从一个地方移动到另外一个地方。 生活中很多我们习以为常,感觉便捷方便的生活方式,是无数卓越的数学家、工程师、设计师等无数的时间投入,才实现的某个小功能,是他们把这些复杂性转移到自己身上替我们简化了。 说回移动端,每个应用中都有其无法简化的复杂度,也不能按照我们个人意愿去除这些功能。这就是为什么飞机稿都简洁好看,而一搬到线上就面目全非。常见的复杂性转移有:“查看更多”、“查看全部”、“查看详情”、“展开和收起”之类的文字做转移跳转,比如:顶部导航栏的更多图标,就是将常用的功能整合并隐藏在首页设计的更多功能模块中,把用户的操作范围转移到另一个地方。 除此之外,还有一些降低操作复杂度的方法: 删除、组织、隐藏 视觉层面的“降噪”方法,删除会干扰用户操作的选项;功能分类明确,围绕用户行为组织信息内容;隐藏那些不常用而又不能少的功能,延迟及阶段性展示。总的来说就是将复杂的信息收起来,展示重要且简洁的界面。 简化交互设计 可以用代码节省用户操作时间的地方,是互联网人一致的追求。例如,B站的一键三…

泰思勒定律 2023年3月17日
;

目录 1、什么是幂等性 2、什么是接口幂等性 3、为什么需要实现幂等性 4、常见场景 5、常见方案 5.1、数据库唯一主键 5.2、数据库乐观锁 5.3、防重 Token 令牌 5.4、分布式锁 6、实战 6.1、思路分析 6.2、核心代码 1、依赖 2、Redis工具类 3、自定义注解CheckIdempotent 4、token创建和检验 5、拦截器的配置 6、启动类 7、yml配置文件 8、Controller编写 9测试 7、总结 8、常见问题 8.1、Redis查看出现乱码 8.2、Jmeter观察结果树 1、什么是幂等性 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同 在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同 幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变 2、什么是接口幂等性 在HTTP/1.1中,对幂等性进行了定义。它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外),即第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用。 这里的副作用是不会对结果产生破坏或者产生不可预料的结果。 …

接口幂等性校验,太优雅了 2023年3月16日
;

1.地址 https://httpbin.org/ 2.接口列表 Endpoint Descirption / This page. /ip Returns Origin IP. /user-agent Returns user-agent. /headers Returns header dict. /get Returns GET data. /post Returns POST data. /patch Returns PATCH data. /put Returns PUT data. /delete Returns DELETE data /gzip Returns gzip-encoded data. /deflate Returns deflate-encoded data. /status/:code Returns given HTTP Status code. /response-headers Returns given response headers. /redirect/:n 302 Redirects n times. /redirect-to?url=foo 302 Redirects to the foo URL. /relative-redirect/:n 302 Relative redirects n …

httpbin使用说明 2023年3月16日
;

帕金森定律(Parkinson’s Law)是官僚主义或官僚主义现象的一种别称,被称为二十世纪西方文化三大发现之一。 也可称之为“官场病”、“组织麻痹病”或者“大企业病”,源于英国著名历史学家诺斯古德·帕金森1958年出版的《帕金森定律》一书的标题。 帕金森定律常常被人们转载传诵,用来解释官场的形形色色。 帕金森在书中阐述了机构人员膨胀的原因及后果:一个不称职的官员,可能有三条出路,第一是申请退职,把位子让给能干的人;第二是让一位能干的人来协助自己工作;第三是任用两个水平比自己更低的人当助手。 这第一条路是万万走不得的,因为那样会丧失许多权力;第二条路也不能走,因为那个能干的人会成为自己的对手;看来只有第三条路最适宜。 于是,两个平庸的助手分担了他的工作,他自己则高高在上发号施令,他们不会对自己的权利构成威胁。 两个助手既然无能,他们就上行下效,再为自己找两个更加无能的助手。 如此类推,就形成了一个机构臃肿、人浮于事、相互扯皮、效率低下的领导体系。 帕金森得出结论:在行政管理中,行政机构会像金字塔一样不断增多,行政人员会不断膨胀,每个人都很忙,但组织效率越来越低下。 这条定律又被称为“金字塔上升”现象。

帕金森定律 2023年3月15日
;

彼得原理(The Peter Principle)正是彼得根据千百个有关组织中不能胜任的失败实例的分析而归纳出来的。其具体内容是:“在一个等级制度中,每个职工趋向于上升到他所不能胜任的地位”。彼得指出,每一个职工由于在原有职位上工作成绩表现好(胜任),就将被提升到更高一级职位;其后,如果继续胜任则将进一步被提升,直至到达他所不能胜任的职位。由此导出的彼得推论是,“每一个职位最终都将被一个不能胜任其工作的职工所占据。层级组织的工作任务多半是由尚未达到不胜任阶层的员工完成的。”每一个职工最终都将达到彼得高地,在该处他的提升商数(PQ)为零。至于如何加速提升到这个高地,有两种方法。其一,是上面的“拉动”,即依靠裙带关系和熟人等从上面拉;其二,是自我的“推动”,即自我训练和进步等,而前者是被普遍采用的。 彼得认为,由于彼得原理的推出,使他“无意间”创设了一门新的科学——层级组织学(Hierarchiology)。该科学是解开所有阶层制度之谜的钥匙,因此也是了解整个文明结构的关键所在。凡是置身于商业、工业、政治、行政、军事、宗教、教育各界的每个人都和层级组织息息相关,亦都受彼得原理的控制。当然,原理的假设条件是:时间足够长,五层级组织里有足够的阶层。彼得原理被认为是同帕金森定律有联系的。

彼得定律 2023年3月15日
;

1.报错信息did you register the component correctly? For recursive components, make sure to provide the "name" option. 2.解决方案,多次调用的组件使用import引入,可以让name不和父组件冲突 components:{ checkInDetail:()=>import(‘@/views/room/status/component/checkInDetail.vue’) }

vue组件互相引用报错did you register the component correctly? For recursive components, make sure to provide the “name” option. 2023年3月1日
;

转移复杂度是徒劳的 前两天在 lobsters 上看到一篇高赞文章 https://ferd.ca/complexity-has-to-live-somewhere.html 大意就是复杂度是不灭的,只是在不同的部分之间做转移。当然这个很多写过 lib 的人都有类似的体会。要让 lib 的用户简单,写 lib 的人就要做得更复杂。 Complexity has to livesomewhere. If you are lucky, it lives in well-defined places. 文章的推论是要承认复杂度总是在那里的,要放在大家都知道的地方管理好。然而另外一个令人悲伤的消息是 Every abstraction is leaky。至少有两个导致侧漏的常见原因: 运行时的 cost 是藏不住的。两种写法可以完全一样,但是执行起来效率就是会有差异。例如 sql 写的时候可以完全忽略数据在磁盘上是怎么组织的,性能调优的时候绝对无法对你隐藏实际的数据分布在哪里。 故障的时候,必须要掀起引擎盖。很多工程师乐衷于在故障总结里分享自己是如何找到 linux kernel 或者硬件驱动的 bug 的。这就说明了,这种掀起引擎盖的难度足以让人为之骄傲。 所以不管你这东西再牛逼,出了故障之后要么是用户自己开盖子来修,然后骂你。要么是等你来修,你又…

复杂度是不灭的,只会转移,难道一切都是徒劳的吗? 2023年2月22日
;

标题就是你流量的百分之80,永远记住这句话。 没有一个好标题,你写的再好,别人也不会看。 打个不恰当的比方,标题就像你在咖啡厅看到的一位美女,你就坐在她的对面,虽然你不了解她,但你已经被她深深吸引, 而这位美女身上的香水味让你忍不住想靠近, 再打一个恰当的比方,标题就是一个讲了三分之一的故事,利用好这三分之一的吸引力,去让粉丝看完剩下的三分之二。 情感类内容首要职责:帮助宣泄 情感类内容的首要职责,就是帮助用户宣泄情绪,情感类标题的职责也同样在此。如果你研究过咪蒙、 HUGO等情感类大号的标题,你就会发现它们都在十分尽职地做着这件事情。 既然要宣泄情绪,标题通常需要观点鲜明,最好非黑即白。 1.用户本位 来看看下面这些阅读量爆表的标题: “孩子小,你不能让着点么?” “女孩子不要太辛苦?””你养我啊?” 职场女性:不敢嫁,不敢生 别逼婚了,我觉得没人配得上我! 这些标题的相同点是字数较少,语法简单,很多直接采用了对话体。这类标题的诀窍在于,完全站在用户的角度, 说他们的心里话,无需进行包装。优势在于,用户在一眼看到标题时,心中都会出现一些想@的人, 胸中立刻腾起一股攻击欲,而这种心理对点击率尤其是转发率非常有利。 2. 挑战常识+制造二元对立 常识是”克己复礼…

自媒体“标题党”的那些奇门绝技 2023年1月6日
;

电子游戏自诞生以来,一直遭受着外挂的困扰,给游戏公司造成了不可估量的损害。本文希望通过介绍外挂的相关知识,让对游戏安全感兴趣、有意愿了解游戏安全知识的同学对游戏安全有个基本的认识。 1. 外挂基本概念 1.1 外挂基本定义 未经官方许可的,可以达到游戏作弊效果的游戏工具。使用这种工具,能获得其他诚实玩家无法达到、或者在短期内得到其他诚实玩家必须通过长期运行游戏才能得到的游戏结果。满足上述效果的工具,称之为“外挂”。 1.2 外挂的影响 外挂作弊行为十分恶劣地影响了游戏行业的发展。 首先,外挂的使用损坏了游戏的公平性。在外挂等游戏中作弊的最直接害处便是影响了游戏的公平性并破坏诚实玩家的利益。其次,它会破坏游戏玩法,损害游戏质量,从而缩短游戏生命周期。通过使用外挂,外挂者可以特别容易获胜或获得更高分数,失去挑战将使游戏不那么可玩。此外,外挂的使用会影响服务器的服务质量并加速玩家的流失。第三,它破坏了游戏公司和玩家的经济利益。游戏外挂造成的犯罪也经常发生。游戏公司主要通过收取增值服务或在线游戏玩家付费来赚钱。外挂的使用破坏了网游的可玩趣味性,减少了游戏用户的在线时间和该类产品的生命周期,这极大地损害了出品公司的经济利益。 1.2 外挂的分类 现如今游戏外挂的种类繁多,面对这么多的外挂很有必要对外挂做一些分类,方便分析和总结外挂的技术和特点。 不更改…

浅谈外挂常识和如何防御 2022年12月28日
;

1.拦截请求 bpu www.baidu.com #拦截 bpu #取消拦截 拦截后提交参数可以在Inspectors中修改 2.拦截响应 bpafter www.baidu.com #拦截 bpafter #取消拦截 返回的数据也在Inspectors中修改,找到SyntaxView中Find & Replace修改替换 3.响应自动替换AutoResponder 确保勾选Enable automatic reaponses 和Unmatched requests passthrough 参考链接:https://blog.csdn.net/Liuyanan990830/article/details/128120537

fiddler拦截请求和修改返回 2022年12月26日
;

1.打开命令行输入wsl 正常情况会提示子系统未安装 2.打开windows 功能,并选中相关功能 点击确认,电脑需要重启 3.打开microsoft store,搜索wsl,下载子系统 4.安装 命令行再次输入wsl进入,会有相关的提示信息,按照提示选择系统安装即可 备注:最近一次安装按照命令行操作提示出错了,这里继续上面的3步骤在microsoft store中安装一个ubuntu 5.使用 通过命令行输入wsl进入,或者快捷方式图标 备注,最近一次安装结果,快捷方式图标点击后似乎卡死了,命令行输入wsl即可进入

win11中安装wsl 2022年12月21日
;

Listen To Port server { # Standard HTTP Protocol listen 80; # Standard HTTPS Protocol listen 443 ssl; # Listen on 80 using IPv6 listen [::]:80; # Listen only on using IPv6 listen [::]:80 ipv6only=on; } Access Logging server { # Relative or full path to log file access_log /path/to/file.log; # Turn ‘on’ or ‘off’ access_log on; } Domain Name server { # Listen to yourdomain.com server_name yourdomain.com; # Listen to multiple domains server_name yourdomain.com www.yourdomain.com; # Listen to all domains server_name *.yourdomain.com; # Listen to all top-level domains server_nam…

nginx常用配置 2022年11月14日
;

1 技术人员 虽然 IT从业者的薪酬在各行业中算是处于领先地位,但内心的焦虑感并不会因为这些表面的高薪酬而得到缓解。时不时的,技术人员会因为看不懂自己付出的大量心血的意义而自我怀疑。就算不考虑是否有意义,这些花费的心血是否能够收到相匹配的报酬,或者是否能够得到相匹配的变现,也让技术人员心烦不已。明明付出了常人难以想象的努力和心血,但这条路的结局依旧要等同于常人么? 技术做得久了,就会让人越来越迷糊。一直忙于解决细节的问题,会习惯性地忽略做这个事情的意义和动机。虽然你可能做了很多的工作,也投入了大量的时间与精力在你的工作上,但跳出来看,你的功夫仅仅是花费在了任务的执行上。至于任务的内容、方向和动机,无一例外都是被动地由由公司分配、由老板指派。 为什么这个方向值得一做,这个方向是不是符合你自己的性格特点和成长方式,你既不不清楚,也无权参与讨论。 当这种方向性、意义、动机性的决策能力长期得不到训练,便会导致一个严重的问题:你无法看清楚承载你技术的大环境。你不知道技术市场的结构、优势以及“漏洞”在哪里。甚至,你根本就不知道还有一个叫做市场的需要你去考虑,不知道它会对你产生极其重要的影响。 2 商业套利者 做商业的人,通常对技术都不是太懂,特别是那些白手起家没怎么念过书的民营企业家。他们通常没有太高的教育背景,自然也不太可能对技术有什么深入的了解和体会…

做一名「技术掮客」去变现自己的技术 2022年11月9日
;

塔西佗陷阱,得名于古罗马时代的历史学家塔西佗,最初来自塔西佗所著的《塔西佗历史》。后被引申为一种社会现象,指当政府部门或某一组织失去公信力时,无论说真话还是假话,做好事还是坏事,都会被认为是说假话、做坏事。 塔西佗陷阱,是塔西佗在评价一位罗马皇帝时所说的话:“一旦皇帝成了人们憎恨的对象,他做的好事和坏事就同样会引起人们对他的厌恶。”

塔西佗陷阱 2022年11月9日
;

需求描述:手机号非必填,但是有输入的时候验证格式。 <el-form ref="form" :rules="rules" :model="form"> <el-form-item label="手机号" prop="mobile"> <el-input v-model="form.mobile" @input="inputMobile" clearable></el-input> </el-form-item> </el-form> let regMobile = /^1\d{10}$/ let validatorMobile = (rule, value, callback) => { if (!value) { callback() // 空值通过 } else if (regMobile.test(value)) { callback() } else { callback(new Error(‘手机号格式错误’)) } } form:{ mobile:” }, rules:{ mobile: [{ validator:…

el-input要么为空要么验证格式 2022年10月23日
;

每天,接近5万亿美元的货币在全球市场上交易。 这是一个在全球每周工作日持续24小时运行的市场——交易可以通过不同的机制发生,例如即期交易,远期交易,外汇掉期,货币掉期或使用其他类型的期权。 在这个极为流动和繁忙的市场中,是什么导致了变化?为什么各国之间的汇率不断变化? 下面这张图将带你了解六个可能影响货币汇率的主要因素。图片来自visualcapitalist,由WEEX·一起交易翻译整理。 来源:https://www.sohu.com/a/242222312_640079

影响汇率的六大因素 2022年9月26日
;

1.fetch formData let data = new FormData() data.append(‘client_key’,’111111′) data.append(‘client_secret’,’222222′) data.append(‘grant_type’,’client_credential’) fetch(‘/douyinOpen/oauth/client_token/’,{ method: ‘post’, body:data }) 备注:省略了content-type因为浏览器自动填入了正确的值 2.fetch json fetch("/douyinOpen/oauth/client_token/", { headers: { "content-type": "application/json" }, body: ‘{"client_key":"111111","client_secret":"222222","grant_type":"client_credential"}’, method: "POST" });…

抖音POI获取token,分别通过axios,fetch发送json和form-data 2022年8月31日
;

配置会以一个优先顺序进行合并。这个顺序是:在 lib/defaults.js 找到的库的默认值,然后是实例的 defaults 属性,最后是请求的 config 参数。后者将优先于前者。这里是一个例子: // 使用由库提供的配置的默认值来创建实例 // 此时超时配置的默认值是 `0` var instance = axios.create(); // 覆写库的超时默认值 // 现在,在超时前,所有请求都会等待 2.5 秒 instance.defaults.timeout = 2500; // 为已知需要花费很长时间的请求覆写超时设置 instance.get(‘/longRequest’, { timeout: 5000 }); 备注:不同版本可能配置不同,0.27.2版本中contentType为application/json,但是在0.18.1版本中contentType为application/json;charset=utf-8,多出了charset=utf-8,在抖音POI获取token的接口中,多出来的这部分就会导致请求报错。

axios配置的优先顺序 2022年8月31日