
Javascript
文章平均质量分 50
Wang's Blog
Keep learning for the innovation era.
展开
-
前端小技巧: 面向切面编程在前端代码中的应用
AOP (Aspect Oriented Programming) 面向切面编程, 主要实现目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或者阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果原创 2023-12-08 20:39:07 · 239 阅读 · 0 评论 -
前端小技巧: 设计一个简版前端统计 SDK
设计一个简版前端统计 sdk原创 2023-12-08 12:59:28 · 398 阅读 · 0 评论 -
前端小技巧: 实现一个比较两个对象是否相等的方法
实现两个对象的深度比较,模拟 lodash.isEqual() 写出一个简单的方案, 如果地址不一样,属性一样,则判定相等原创 2023-12-07 20:18:40 · 839 阅读 · 0 评论 -
前端小技巧: TS实现EventBus自定义事件
区分 on, once合理的数据结构,比算法优化更有效。原创 2023-11-11 18:10:54 · 641 阅读 · 0 评论 -
前端小技巧: 数组去重的15种方法
去重,就是去除重复的选项,得到一组唯一的选项集合的过程上述整理了14条去重方式,大同小异,只是实现方式上的区别注意: 在前端或者说javascript中的集合,是可以使用不同的数据类型的所以,需要注意上述方法中的一些适用场景。原创 2023-11-11 14:12:00 · 2218 阅读 · 0 评论 -
前端小技巧: 数组reduce方法的5种常见用途
【代码】前端小技巧: 数组的 reduce 方法的五种常见用途。原创 2023-11-11 10:56:58 · 842 阅读 · 0 评论 -
前端小技巧: 拍平数组的5种常用方法
1 )一般思路, 先实现一级扁平化,然后递归,直到全部扁平。2 )基于 Array的concat方法和递归实现, 优化方案1。 3 )使用reduce实现。4 )基于String的toString方法和递归实现。5 )直接使用toString方法即可拍平成字符串,再转成数组即可,方案4的优化版本。 6 ) 使用 Array的 flat() 方法, 注意参数的使用,可以用 Infinity 代替具体的层数。原创 2023-11-10 22:41:46 · 1290 阅读 · 0 评论 -
前端小技巧: 区分防抖和节流的方法
【代码】前端小技巧: 防抖和节流的区别。原创 2023-11-10 18:32:15 · 145 阅读 · 0 评论 -
前端小技巧: TS实现bind函数,call函数,以及apply函数
绑定 this传入执行参数分析:如何在函数执行时,绑定this如:const obj = {x: 100, fn() {this.x}}执行obj.fn(), 此时fn内部的this就指向obj可以借次来实现函数绑定 this用 call 实现 apply, 用 apply 实现 call 不可取原生 call apply 的 this 如果是值类型sing,会被 new Object(…)Symbol 的作用,是防止属性之间的冲突。原创 2023-10-29 13:57:23 · 1386 阅读 · 0 评论 -
数据结构与算法之链表: 基于链表实现js中的原型链原理与算法实现 (Typescript版)
若A沿着原型链能找到B.prototype, 则A instanceof B为true。如果在A对象上没有找到x属性,那么会沿着原型链找x属性。2 )不同类型查找, 交叉验证。原创 2023-09-25 12:04:35 · 167 阅读 · 0 评论 -
Socket.io教程: koa集成socket.io
Koa集成Socket.io步骤类比之前express项目中的使用,有以下几个步骤安装:$ cnpm i -S koa-socket引入: const IO = require( 'koa-socket' )实例化:const io = new IO()接入koa: io.attach( app )配置服务端客户端使用后端演示var Koa = require('koa'), router = require('koa-router')(), views = requ原创 2020-06-07 21:14:35 · 1414 阅读 · 0 评论 -
Socket.io教程: 基于Express的多聊天室(分组)的简单设计与实现
多聊天室(多个分组)的简单设计概述相当于实现多个群聊的功能每个群之间互相不干扰后端设计var express = require('express');var url = require('url');var app = express();var server = require('http').Server(app);var io = require('socket.io')(server);app.set('view engine','ejs');app.use(expres原创 2020-06-07 20:48:19 · 767 阅读 · 0 评论 -
Socket.io教程: 基于Express的多人聊天室的简单设计与实现
多人聊天室的简单设计概述相当于实现一个简单的群聊功能demo用户输入自己的名称进入聊天室多人即时畅聊后端设计var express=require('express');var app=express();var DB=require('./module/db.js');app.set('view engine','ejs');app.use(express.static('public'));var server = require('http').Server(app);v原创 2020-06-07 19:44:11 · 341 阅读 · 0 评论 -
Socket.io教程: Express结合Socket.io实现通信: 聊天室及智能客服的简单演示
基于express的socket.io通信代码展示服务端var express = require('express');var app = express();var server = require('http').Server(app);var io = require('socket.io')(server);app.set('view engine','ejs');app.use(express.static('public'));app.get('/',function(re原创 2020-06-07 13:49:53 · 994 阅读 · 0 评论 -
Socket.io教程: 原生nodejs结合Socket.io实现服务器和客户端的相互通信
安装 Socket.io官网:http://socket.io/$ npm install socket.ioSocket.io对象的创建写原生的 JS,搭建一个服务器,server 创建好之后, 创建一个 io 对象var http = require("http");var server = http.createServer(function(req,res){ if(req.url == "/"){ //显示首页 fs.readFile("./index.ht原创 2020-06-07 11:49:56 · 1166 阅读 · 0 评论 -
Eggjs笔记:关于JWT的接口权限验证
关于接口的安全验证基于 Session 的安全验证Session 存储在服务器,用户用户比较少的话是一种简单的安全验证机制,但是涉及到跨域 的话需要进行一些配置用户量非常非常大的话会耗费一定的服务器资源(中小项目不需要考虑)对请求参数进行加密的签名验证涉及公钥、私钥、签名等JWTJWT 全称 JSON Web Token,是目前比较流行的另一种跨域身份验证解决方案也是被很多人用坏的一种安全验证机制,具体需要看项目是否适合关于 JWT的验证的流程客户端请求接口登录,原创 2020-06-06 10:04:38 · 1362 阅读 · 0 评论 -
Eggjs笔记:解决API接口跨域请求时cookie和session失效的问题
问题的出现当我们打开浏览器访问,从一个页面跳转到另一个页面,session中的信息仍可以正常访问,为什么在请求API接口的时候, 一个接口可以访问到,另一个却无法访问到session中的信息了呢? 其实这个问题很简单,session是基于cookie的,浏览器可以在访问的时候通过cookie来确认用户权限,而接口API的直接访问是没有cookie等信息的, 这里涉及到一个cookie跨域的问题,所以无法获取session的信息,那如何在API接口中共享session信息呢?解决方案就是前端+后端的方式来支原创 2020-06-05 13:42:51 · 1880 阅读 · 3 评论 -
Eggjs笔记:RESTful API的设计
关于RESTful API网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…)。因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致 API 构架的流行,甚至出现"API First"的设计思想RESTful API 是目前比较成熟的一套互联网应用程序的API设计理论,在企业中用的也非常多。RESTful API 也有不一些不足:(字段冗余,扩展性差、无法聚合 api、无法定义数据类型、网络请求次数多)等不足Graph原创 2020-06-05 12:53:25 · 868 阅读 · 0 评论 -
Eggjs笔记:用户注册之短信相关功能
短信相关服务相关厂商聚合数据: https://www.juhe.cn/service云片: https://www.yunpian.com/阿里云,腾讯,百度等都有提供短信接口选择适合自己的一款一般性接入流程这里用云片的服务来做说明, https://www.yunpian.com/注册账户并实名认证后台管理系统的控制台中创建签名, 签名显示在短信内容的最前面,显示这条短信来自哪家公司/产品/网站。因运营商要求,签名需经过审核。后台管理系统的控制台中创建模板找sdk以及官方文档实原创 2020-06-03 22:35:53 · 978 阅读 · 0 评论 -
Eggjs笔记:接入微信支付相关流程与演示
概述准备个体工商户、企业、政府及事业单位https://pay.weixin.qq.com/static/applyment_guide/applyment_detail_website.shtml需要获取内容:appid:应用 APPID(必须配置,开户邮件中可查看)MCHID:微信支付商户号(必须配置,开户邮件中可查看)KEY:API 密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)32位的密钥注册商户平台,申请微信支付需 1~5个工作日审核注册微信商户平台原创 2020-06-03 19:42:20 · 2094 阅读 · 0 评论 -
Eggjs笔记:接入支付宝支付相关流程与演示
Eggjs笔记:支付宝支付相关流程与演示概览接入支付宝必须注册企业支付宝账户支付宝开发接入页面:https://open.alipay.com/developmentAccess/developmentAccess.html点击支付应用填写对应应用名称, 点击创建创建以后进入概览页面, 上传应用图标设置应用公钥,提交审核接口加密签名下载签名工具:https://opendocs.alipay.com/open/291/106097/选择非Java(java语言还是选择java原创 2020-06-03 11:01:07 · 1872 阅读 · 3 评论 -
Eggjs笔记:关于定时任务
定时任务https://eggjs.org/zh-cn/basics/schedule.html可以让我们定时的去执行一些操作,比如:定时检测网站是否被篡改,定时的更新缓存、定时的爬取数据等所有的定时任务都统一存放在 app/schedule 目录下每一个文件都是一个独立的定时任务,可以配置定时任务的属性和要执行的方法。1 ) 定时任务的复杂写法app/schedule/watch...原创 2020-04-01 19:50:05 · 2864 阅读 · 1 评论 -
Eggjs笔记:控制器基类的封装和控制器兼容写法
Egg.js 控制器基类 BaseController按照类的方式编写 Controller,不仅可以让我们更好的对 Controller 层代码进行抽象例如将一些统一的处理抽象成一些私有方法,还可以通过自定义 Controller 基类的方式封装应用中常用的方法官方要求在app/core中配置核心方法// app/core/base.jsconst { Controller...原创 2020-04-01 18:11:46 · 678 阅读 · 0 评论 -
Eggjs笔记:路由添加多个中间件支持,路由别名,路由重定向,路由分组
Eggjs中的路由配置官网:https://eggjs.org/zh-cn/basics/router.html路由添加多个中间件支持示例:const auth1 = app.middleware.auth1();const auth2 = app.middleware.auth2();router.get('/', auth1, auth2, controller.home.i...原创 2020-04-01 15:54:46 · 1721 阅读 · 0 评论 -
Eggjs笔记:路由中的中间件,默认中间件,配置koa中间件,中间件的通用配置
在路由中使用中间件只有指定路由可以使用中间件,无需在config配置只需在相关路由的js中引入中间件,给指定路由配置中间件,在第二个参数配置具体步骤如下:新建app/middleware/test.jsmodule.exports=(option,app)=>{ return async function auth(ctx,next){ consol...原创 2020-04-01 14:00:03 · 1538 阅读 · 0 评论 -
Eggjs笔记:cookie和session
Cookiehttps://eggjs.org/zh-cn/core/cookie-and-session.htmlcookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域名的时候共享数据HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何...原创 2020-04-01 12:01:09 · 571 阅读 · 0 评论 -
Eggjs笔记:中间件配置、Post数据处理、安全机制CSRF防范、中间件模板全局变量配置
关于中间件中间件:匹配路由前、匹配路由完成做的一系列的操作Egg 是基于 Koa 实现的Egg 的中间件形式和 Koa 的中间件形式是一样的,都是基于洋葱圈模型Koa中的中间件:http://eggjs.org/zh-cn/intro/egg-and-koa.html#midllewareEgg中的中间件:http://eggjs.org/zh-cn/basics/middleware...原创 2020-03-31 22:36:09 · 991 阅读 · 0 评论 -
Eggjs笔记:路由get传值、动态路由、静态资源访问、ejs模板引擎、数据模型Service、方法扩展
路由get传值官网API:https://eggjs.org/zh-cn/basics/router.html1 )query的方式路由router.get('/news', controller.news.index);news控制器 async index() { const { ctx } = this; ctx.render('news'); //...原创 2020-03-31 19:59:42 · 1015 阅读 · 0 评论 -
Eggjs笔记:目录结构、Egg目录约定规范、MVC的架构
Egg.js 目录结构 这个是比较简单的目录结构,简要做下介绍,当然还可以创建其他文件,一般如下说明app 项目开发目录config 项目配置文件logs 日志文件run 项目运行配置文件test 测试文件.autod.conf.js、.eslintignore、.eslintrc、.gitignore、.travis.yml、appveyor.yml 这些是运行配置文...原创 2020-03-31 13:39:28 · 1289 阅读 · 0 评论 -
Eggjs笔记:Egg.js介绍以及环境搭建
Egg.js 官网官 网:https://eggjs.org中文网站:https://eggjs.org/zh-cn/Egg.js 是什么Egg.js 是《阿里旗下产品》基于 Node.js 和 Koa 是一个 Nodejs 的企业级应用开发框架。可以帮助发团队和开发人员降低开发和维护成本。Express 和 Koa 是 Node.js 社区广泛使用的框架,简单且扩展性强,非...原创 2020-03-31 12:58:05 · 1459 阅读 · 0 评论 -
ES6知识点整理模块化的应用
目前浏览器还不能完全支持模块化,需要引入很多编译环境,下面在nodejs中来模拟ES6中的模块化nodejs中针对模块化演示的配置环境的安装:$ npm install --save babel-cli babel-preset-node6运行:$ ./node_modules/.bin/babel-node.js --presets node6 ./your_script...原创 2018-03-25 13:49:05 · 590 阅读 · 0 评论 -
chrome插件的开发案例分析
chrome插件开发案例分享,通过chrome插件来给我们系统页面添加辅助功能,即发送一些需要的数据和进行一些浏览器本地的存储功能。仓库地址chrome-plugin-example@githubChrome 插件中manifest.json的主要设置{ "permissions": [ "http://localhost:3000/*"...原创 2018-04-07 20:27:16 · 944 阅读 · 0 评论 -
ES6知识点整理Proxy的应用
Proxy 用于修改对象某些操作的默认行为,可以对外界的访问进行过滤和改写,其概念类似于元编程。 Proxy 让我们可以对任何对象的绝大部分行为进行监听和干涉,实现更多的自定义程序行为。在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截。目前【兼容性】存在一定的问题,目前在chrome和ff浏览器中的非严格模式下可用,一些先进的技术即使在目前不能广泛应用,但...原创 2018-03-24 16:33:14 · 667 阅读 · 0 评论 -
前端知识点整理之正则表达式
正则的声明方式var reg = new RegExp(/表达式/);var reg = /表达式/;正则中的量词* 重复零次或多次 (>=0)+ 重复一次或更多次 (>=1)? 重复零次或1次 (0 || 1){} 重复多少次,如:{5} 表示重复5次; {n,m} 表示重复 n-m 次数之间; {0,} 表示重复0次或多次,同 * ; {0,1}重复0...原创 2018-03-20 15:34:23 · 876 阅读 · 0 评论 -
ES6知识点整理函数对象参数的默认值及其解构的应用
同函数数组参数一样,函数的对象参数的默认值和解构过程整理函数对象参数的默认值与解构的形式此处使用箭头函数来处理 : (({x,y})=>{ console.log(x, y); // // undefined undefined})({});(({x=1,y=2})=>{ console.log(x,y); // 1 2})({});(({x...原创 2018-03-24 15:17:11 · 2270 阅读 · 0 评论 -
ES6知识点整理函数数组参数的默认值及其解构的应用
在ES6中, 函数的参数也可以使用解构赋值和默认值的设置,下面我们来看下在ES6之前设置函数默认值的写法function test(x,y) { x = x || 12; y = y || 22; console.log(x,y);}test(); // 12 22test(1,2) // 1 2在ES6中给函数参数赋默认值function...原创 2018-03-24 14:37:46 · 2380 阅读 · 0 评论 -
ES6知识点整理对象解构赋值的应用
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring), 在对象的解构赋值中有一些需要注意的事项初识对象的解构var {name} = { name:'Joh', age:10};console.log(name); // Joh通过解构的形式取出对象中的属性值对解构出的属性进行重命名var {na...原创 2018-03-24 13:53:35 · 2381 阅读 · 0 评论 -
ES6知识点整理数组解构和字符串解构的应用
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring), 而数组的解构赋值是从数组中提取值,按照对应位置,对变量赋值。ES6之前的赋值操作var arr = [1,2,3];var a = arr[0];var b = arr[1];var c = arr[2];console.log(a,b,c); // 1 2...原创 2018-03-24 11:52:32 · 1537 阅读 · 0 评论 -
for循环性能测试
var arr = [0,1,2,3,4,5,6,7,8,9]; test1(); function test1(){ console.time('test1'); for(var i = 0; i < arr.length; i ++) { } console.timeEnd('test1'); } test2(); function test原创 2016-03-12 01:53:35 · 1814 阅读 · 0 评论 -
ES6知识点整理使用jspm部署ES6的项目的应用
项目的初始化在项目目录中执行,$ npm init -y 初始化操作安装jspm依赖:$ sudo yarn add jspm --devjspm初始化操作:$ ./node_modules/.bin/jspm init 一路回车,选择输入 BabelMacBook-Pro:20 Johnny$ ./node_modules/.bin/jspm initWould you like...原创 2018-03-25 16:50:45 · 828 阅读 · 0 评论