自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

pig_is_duck的博客

用来记录我在学习路上的一些笔记,也希望可以帮到其他人

  • 博客(93)
  • 资源 (1)
  • 收藏
  • 关注

原创 网页判断版本更新

前端网页应对版本更新弹窗的相关解决方案

2023-11-12 15:04:32 339

原创 企业微信H5登录流程,以及遇到的问题解决

在开发企业微信H5应用的时候,遇到的第一个问题,就是登录问题,在这里也遇到了一些问题,特此总结出来

2022-11-08 15:03:23 2419 1

原创 微信小程序--苹果机器日期格式错误new Date(日期)显示Invina Date

苹果上的new Date()差异

2022-02-15 15:46:42 1123 1

原创 如何通过JS去控制小程序的【频繁】视图更新? -- table表头和列固定 -- wxs响应事件

如何通过JS去 频繁 的控制微信小程序的视频样式,可以使用wxs响应事件

2021-12-11 17:47:47 882 4

原创 关于微信新的获取用户信息的方式 wx.getUserProfile

好久没更新博客了,最近收到微信官方的消息推送,显示获取用户信息的方式从wx.getUserInfo 变为 wx.getUserProfile,于是查了一下文档,就来写下这篇博客,以供他人参考首先,该文档链接为: wx.getUserProfile文档地址根据我亲手实验后,发现要使用 wx.getUserProfile,需要满足以下几个条件:开发者工具需要升级到 1.05以上调试基础库需要在 14.1 以上该事件必须发生在 Tap 事件函数内具体写法为:wxml新旧写法:<!--

2021-04-05 15:23:19 2088

原创 02-TypeScript安装和第一个程序

一、TypeScript安装在这里安装的,并不是安装TypeScript,而是安装TS的解析工具npm i -g typescript二、第一个TypeScript程序2.1、编写TS代码let a: string = 'Hello World!'console.log(a)2.2、转换成JS代码tsc 01-hello.ts(文件名)也可以直接按照ts-nodenpm i -g ts-node然后直接 ts-node 01-hello.ts...

2020-11-15 20:39:46 88

原创 01-TypeScript基本认识

一、什么是TypeScriptTypeScript是JavaScript的超集(JS有的TS都有),最终会编译为JavaScript代码,拓展了JS的语法,TypeScript 通过类型注解提供编译时的静态类型检查。TS开发出来的目的,就是为了开发大型应用TypeScript = Type + JavaScript二、语法特性比起JS,TS多了:类型检查、类型推断和类型擦除接口枚举泛型编程Mixin名字空间Await元组举例:// TypeScript 代码:有明确的

2020-11-15 20:38:31 111

原创 10-javascript基础---symbol数据类型和interator接口

一、Symbol数据类型在ES6中,提出了一个新的基本数据类型Symbol特点:Symbol的值是唯一的:解决命名冲突问题Symbol的值,无法与其他数据进行计算,包括字符串拼接for in, for of遍历不会遍历Symbol属性使用:传参标识let symbol = Symbol('one')console.log(symbol) // Symbol(one)console.log(typeof symbol) // Symbol调用Symbol函数得到

2020-10-16 22:19:12 218

原创 09-javascript基础---let和const

一、let1、作用与var类似,用于声明一个变量2、特点无法重复声明在块级作用域有效会预编译,有变量提升,但是不能提前使用提升的变量/* 无法重复声明 */let a = 123let a = 345 // 报错3、let的变量提升全局变量提升:会创建一个变量对象Script,用来收集全局作用域下 let 定义的变量,但是没有赋值局部变量提升:会将var let定义的变量全部放到当前函数的变量对象中与var变量提升的区别:let的变量提升,在为赋值无法使用

2020-10-11 15:53:49 95

原创 08-javascript基础-Object & Array & Function拓展

一、Object拓展ES5給Object拓展了一些静态方法,常用的:1、 Object.create写法:Object.create(原型对象, [自有属性])作用:以指定对象为原型,创建新的对象// 原型对象var obj = { name: 'Tom', showName: function () { console.log(this.name) }}// 新对象var obj2 = Object.create(obj, { name: { val

2020-10-11 15:51:42 101

原创 07-javascript基础----js对象&&继承

一、对象基础1. 对象属性的方式对象属性的方式有两种:obj.xxxobj['xxx']那么,什么时候用到第二种([‘属性名’])的方式呢?当属性名不是合法的标识名时var obj = {}obj.content-type = 'application' // 报错obj['content-type'] = 'application' // 正确当 属性名不确定时var obj = {}// 想要将 param 的值 作为 keyvar param = 'ag

2020-10-06 21:06:00 149

原创 06-javascript基础----js闭包

一、闭包1、理解看这段代码:function foo() { var i = 1 function show() { i += 1 console.log(i) } return show}var a = foo()a()正常情况,函数定义时,开辟一个内存空间,使用结束后,该变量取消指向内存地址,内存地址准备被销毁如果内部函数引用了外部函数的值,那么就会形成闭包2、 概念闭包是一个存在内部函数 的引用关系该引用指向的是 外部

2020-10-05 23:01:15 108

原创 05-javascript基础----js作用域

一、作用域1. 概念 & 作用作用域,就是一个代码块所在的区域,它是静态的,在编写代码时就已经确定了不同于执行上下文,(执行上下文是动态的,执行创建)举例:执行上下文时 建房子 时的 打地基作用域 是 建房子 时的 区域作用:用来决定代码执行的范围,变量所属的范围2. 作用域和执行上下文区别作用域执行上下文创建时刻函数定义function a() {}函数调用a()性质静态的,函数定义了,就不会变化动态的存在时间不会变化调用时创建,

2020-10-03 16:00:20 84

原创 04-javascript基础----js执行上下文

一、变量提升 & 函数提升1. 概念js引擎在js代码正式执行之前,会做一些 预解析 的工作找关键字: var、function找到 var 以后将 var 后边的变量提前声明,但是不赋值 :var a;找到 function 以后,定义对应的函数,也就是说,函数在预解析的时候已经定义完毕预解析:全局预解析,局部预解析2. 证明2.1、实例我们可以使用 断电调试的方法,来证明变量 & 函数 是否提升如以下代码:console.log('程序开始'

2020-10-02 21:11:12 171

原创 03-javascript基础----js原型和原型链

一、原型1.1、什么是原型对象原型对象的本质,就是一个普通的Object实例{}每个函数都有一个prototype属性,该属性指向的是原型对象(显示原型对象)每个实例对象身上都有一个__proto__属性,该属性指向的也是原型对象(隐式原型对象)构造函数的显示原型 === 当前构造函数实例对象的隐式原型function Person(name, age) { this.name = name; this.age = age; this.showAge = func

2020-09-30 12:22:58 214

原创 02-javascript基础----js函数

一、什么是函数函数也是对象的一种,但是函数区分与对象最重要的一点:函数具有可执行性对象:var a = { name: 'wang'}函数:function a() { var a = 'wang' console.log(a)}a()二、为什么要设计函数简化代码的编写,减少重复代码功能点明确,复用,一个函数通常只有一个指定的功能隔离变量,减少命名污染function a() { var name = 'wang'}function b() { v

2020-09-30 12:20:06 100

原创 01-javascript基础----js数据类型

一、js数据类型1、分类js的数据类型分为两种:基本数据类型:String、Number、Boolean、Null、undefined引用数据类型:Object、Array、functionJS只有 堆内存 结构,我们所说的 堆栈内存 是指这个堆内存中像栈内存的分离出来2、基本数据类型基本数据类型的存放方式,是存放在栈内存中,拥有以下特性:基本数据类型的特点:一旦定义了值,就不会改变var a = 123a = 234先在栈内存开拓一个空间,存放值 123定义一个变量a,指向

2020-09-30 12:18:48 107

原创 前端初步入门spring-------08-将拦截器运用到spring

那么,既然学习了代理衍生出的拦截器,那么我们便可以运用在我们创建好的spring工程上还记得那个MVC和注解开启的项目吗。既然是AOP的,是面向切面的,那么,我们接下来,就是建立了其中一个A,建立一个切面,功能是拦截器1、新建切面模块我们新建一个文件夹,名为aspect,用来存放不同功能的切面文件2、下载相应的依赖因为要在spring建立切面功能,我们需要去maven安装对应的依赖https://mvnrepository.com/搜索aspect,找到AspectJ Runtime、Asp

2020-09-08 19:09:10 128

原创 前端初步入门spring-------07-代理衍生的拦截器

利用,代理的特性,我们可以制作一个拦截器,用来发出目标对象执行的通知1、编写接口一个五个通知,分别在业务执行的生命周期里:before:前置通知,业务开始执行时发出around:环绕通知,业务正在执行时发出,业务就在这个通知里面执行afterReturning:后置通知,业务执行结束时发出afterThrowing:异常通知,业务执行异常时发出after:最终通知,业务不管执行与否,都会被调用/** * 拦截器标准 * 代理方法的 生命周期 * @author PigIsDuc

2020-09-08 19:08:09 102 1

原创 前端初步入门spring-------06-代理

一、什么是代理代理,是OOP里面,很重要的一个设计模式,成为代理模式就是生成一个和真实角色 相同的 代理角色真实角色负责自己业务有关的事情代理角色负责一些边角的事情,来为真实业务辅助比如 医生 和 护士医生算是一个真实角色,护士算是 医生的代理,也就是代理角色医生做好自己业务的事情,医护患者护士帮助医生,做其他的事情,比如量体温,助手等二、代理Demo2.1、代理工厂ProxyFactory首先,我们还是遵守工厂模式的思想,先建一个工厂来降低耦合度/** * 基于反射的代理工厂

2020-09-08 19:07:32 94

原创 前端初步入门spring-------05-使用mvc和注解开启项目

一、为什么要使用注解因为一个项目内,有很多个bean类,如果一个个写入xml文件中,太过于繁琐这时可以使用注解扫描,在有注解的地方,自动注册为bean类,交给spring管理二、注解的过程开启注解扫描,制定扫描从哪个包开始(演示从, net.duck 开始扫描)<beans> <context:component-scan base-package="net.duck"></context:component-scan></beans>对M

2020-09-08 19:06:51 81

原创 前端初步入门spring-------04-mvc思想

MVC思想一、什么是MVC思想含义:MVC是一种三层设计模式,包括M--model数据模型层、V--view视图层、C--controlller控制层二、MVC思想的目录那么,安装MVC思想,我们可以将项目目录分为几个模块POJO模块DAO模块Serlvet模块Controller模块2.1、POJO模块含义:和Dao一样属于数据模型层, pojo中封装的的对象其实还可以细分成好多个类别PO:persist(持久化) object,和数据表中的记录完全对应javaBean

2020-09-07 09:19:06 134

原创 前端初步入门spring------03-依赖注入

IOC操作 – Bean管理一、什么是Bean管理概念:Spring创建对象Spring注入(由Spring注入属性)二、Bean管理操作2.1、基于xml实现创建对象方式:在配置文件中,使用Bean标签,添加对象的对应的属性,就可以实现对象创建属性说明:id: bean的唯一表示class :类的全路径name :作用类似id,但可以多个创建对象时,默认执行无参构造方法注册一个bean ,将bean交给sprin容器管理 默认情况下,所有的bean都是

2020-09-07 09:17:55 244

原创 前端初步入门spring-------02-控制反转

spring核心思想—控制反转IOC一、什么是IOC全称:Inversion of Control本质:把对象和对象间的调用过程,交给Spring进行管理二、IOC底层原理xml解析工厂模式反射 — 通过得到类的字节码文件,操作类中的内容工厂模式解析通过工厂模式,降低耦合度// Dao层class UserDao { ...}// Factory工厂层class UserFactory { public static UserDao getDao()

2020-09-07 09:16:57 92

原创 前端初步入门spring-------01-从0构建spring工程

一、配置Maven1.1、下载下载地址:http://maven.apache.org/download.cgi点击1.2、安装Maven1.2.1、解压到对应的文件夹1.2.2、配置环境变量右键我的电脑 -> 高级 -> 环境变量在全局变量添加 MAVEN-HOME,指向解压的目录找到环境变量Path,添加一个 %MAEVN_HOME%\bin打开CMD,输入指令 mvn -v 检测是否配置成功如果成功之后 输入 mvn help:system

2020-09-07 09:14:31 158

原创 KOA --- 5. 全局异常处理

在开发中,为了及时的反馈信息,与前端对接好,异常处理,是后端必须去做的一种事情,反馈正确的信息,可以加快bug的解决在 node中,由于基本都是异步方法,所以,为了能够处理好异步的异常,我们需要使用 async/await来解决一、异常处理Demo由于中间件的特性,使得它可以用来作为全局异常处理的一个好途径为了代码的分离性,我们可以新建一个 专门存放中间件的文件夹middlewares,然后新建一个文件exception.js,用来存放异常处理的代码exception.js.

2020-08-10 16:26:42 890 5

原创 KOA --- 4. 接收参数

一、获取动态路径参数发送请求:http://localhost:3000/v1/3/classic/latest需要获取到里面的 3接收请求// 1. 获取路径里面的 idrouter.post('/v1/:id/classic/latest', async ctx => { const id = ctx.params.id console.log(path) ctx.body = {key: 'calssic'}})二、获取获取解析的查询字符串发送请求:htt

2020-08-06 19:58:49 275

原创 KOA --- 2. 路由的基本使用

一、安装npm install koa-router --save二、基本使用const Koa = require('koa')// 1. 导入路由const Router = require('koa-router')const app = new Koa()// 2. 实例化路由const router = new Router()// 3. 编写路由router.get('/classic/latest', async ctx => { ctx.body = {

2020-08-06 19:57:51 254

原创 KOA --- 2. 洋葱模型

一、什么是koa的洋葱模型特点: 独特的中间件流程控制,就是典型的洋葱模型二、解析洋葱模型在两个中间件函数,用 next 隔开对应的代码Democonst Koa = require('koa')const app = new Koa()// #1app.use( async (ctx, next) => { console.log('1') await next() console.log('1')})// #2app.use( async (ctx, ne

2020-08-05 16:40:39 991

原创 KOA --- 1. 简介及安装

一、koa的特点KOA也是作为node开发web后端的一种框架,类似于 express ,但是,koa非常精简,适用于二次开发koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。官网:https://www.ko

2020-08-05 16:39:25 331

原创 你真的会用 Promise 吗,快来看看正确的写法!!!

这个思路,是 受到 七月老师的教导的当我们遇到回调地狱,通常都是怎么解决的呢,如果不使用 async/await,那么写出来的代码,大部分(包括我)都是又臭又长的,不忍直视,那么使用下面的写法,会更加赏心悦目哦1.第一种,普通的写法 bookModel.getHotList().then(res => { console.log(res) bookModel.getMyBookCount().then(res => { console.log(res

2020-07-26 18:31:27 291 1

原创 Express ---- 5. 中间件

一、什么是中间件**中间件:**就是 做中间代理的操作。大多数情况下,中间件就是在做接收到请求和发送响应中间的一系列操作。事实上,express是一个路由和中间件的web框架,Express 应用程序基本上是一系列中间件函数的调用。输入网址到渲染的过程:浏览器发送请求express接受请求中间处理的过程,就是:中间件路由函数处理渲染(req, res)res.render渲染二、中间件的作用执行任何代码。对请求和响应对象进行更改。结束请求/响应循环。调用堆栈中的下一个

2020-07-21 14:58:53 106

原创 Express ---- 4. 获取POST请求参数

一、关于POST请求post方法作为http请求很重要的一部分,几乎所有的网站都有用到它,与get不同,post请求更像是在服务器上做修改操作,它一般用于数据资源的更新。 相比于get请求,post所请求的数据会更加安全。上一章中我们发现get请求会在地址栏显示输入的用户名和密码(有中文时会转化为BASE64加密),而post请求则会将数据放入http包的包体中,这使得别人无法直接看到用户名和密码!二、Express如何设置POST请求1.我们的知道,首先我们得知道在form表单进行post请求,en

2020-07-20 15:42:41 1212

原创 Express ---- 3. 获取GET请求参数

一、关于get请求一般在网站开发中,get都用作数据获取和查询,类似于数据库中的查询操作,当服务器解析前台资源后即传输相应内容;而查询字符串是在URL上进行的,形如:http://localhost:8080/login?goods1=0001&goods2=0002二、获取前台get请求2.1、自己解析 get 请求一个URL的get请求,是由http://localhost:8080/login?goods1=0001&goods2=0002协议 + 域名 + 端口号

2020-07-19 19:48:05 871

原创 Express ---- 2. express路由

一、Express路由路由是指确定应用程序如何响应客户端对特定端点的请求,该特定端点是URI(或路径)和特定的HTTP请求方法。它包含一个请求方法、路径、和回调函数app.methods(path, callback)二、Express路由方法Express方法来源于 HTTP方法之一,附加在express类的实例,有:get、post、put、delete等app.get('/', function (req, res) { res.send('Hello World!')})ap

2020-07-19 19:46:17 145

原创 Express ---- 1. express和脚手架的安装和初始项目

一、介绍ndoe.js,一个基于javsscript运行环境的服务器语言,它的出现使得javascript有能力去实现服务器操作。在gitHub上ndoe.js的star数已接近6万,可见其受欢迎程度;而基于node.js的Express则把原先的许多操作变的简单灵活,一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。express官方网址:www.expressjs.com.cn二、安装2.1、express安装npm

2020-07-18 15:21:36 259

原创 Node--7.Node.js 连接 MySQL

Node.js 连接 MySQL一、安装库npm install mysql二、基本使用引入 mysql 模块: require('mysql')创建数据库对象: mysql.createConnection(options)数据库连接: connection.connect(callback)执行数据库语句: connection.query(sqlStr, callback)const mysql = require('mysql')// 1. 创建的数据库配置信息const

2020-07-17 15:04:02 204

原创 Node--6. url 模块和 http 模块

一、URL模块主要接口方法引入url模块: require('url');将网络地址解析成 对象: url.parse(httpUrl)// 引入url模块let url = require('url')let httpUrl = 'https://sale.vmall.com/pseries.html?cid=10618'// 将网络地址解析成 对象let urlObj = url.parse(httpUrl)console.log(urlObj)let targetUrl

2020-07-17 15:03:06 113

原创 Node--5.路径模块和系统模块

一、路径模块1.1、主要接口方法导入路径模块: require('path');获取路径信息的扩展名:path.extname(path)获取当前执行路径的完整路径:__dirname获取当前的执行文件:__dirname将字符串拼接成路径:path.resolve([...paths])将字符串拼接成路径:path.join([...paths])将路径解析成 对象:path.parse(path)/** * root: 根路径 * dir: 目录 *

2020-07-15 13:05:48 88

原创 Node--4.node事件

一、自定义事件1.1、自定义事件创建(node事件原理)// 自定义一个事件对象let readThing ={ // 用来放置事件的对象 event: {}, // 用来定义事件 // 参数:eventName --》 事件名, eventFn --》 事件 on: function(eventName, eventFn) { if(this.event[eventName]) { this.event[eventName].push(eventFn)

2020-07-15 13:05:13 162

IObit Uninstaller 9.3.0.11.zip

IObit Uninstaller是一款类似的Windows添加/删除程序,其体积小巧,功能强大,运行速度快,可靠性高。其使用方法非常简单,而且还是一款免费软件。 IObit Uninstaller是一款功能强大的软件,能够有效地取代Windows自带的卸载功能。通过它,你可以彻底卸载不需要的软件,不留下软件的相关信息,并且不会造成系统崩溃。

2020-05-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除