- 博客(38)
- 收藏
- 关注
原创 mysql基础
1.关系型数据库设计规则2.基本的select语句3.运算符4.排序与分页5.多表查询6.函数的分类7.SQL底层执行原理8.子查询一、关系型数据库设计规则关系型数据库的典型数据结构就是数据表,这些数据表的组成都是结构化的(Structured)将数据放到表中,表再放到库中一个数据库中可以有多个表,每个表都有一个名字,用来标识自己,表名具有唯一性表具有一些特性,这些特性定义了数据在表中如何储存,类似Java和Python中“类”的设计1.1 表、记录、字段E-R模型中有3个
2022-05-15 19:29:57
1248
原创 uniapp 微信小程序配置 animate.css
1.先下载animate.cssnpm install animate.css --save2.然后再node_modules中找到animate.css/animate.css,复制到static目录下3.在App.vue中引入<style> /* 引入动画 */ @import "./static/animate/animate.css";</style>注意:微信小程序中要把animate.css文件中的 :root 替换成 page ...
2022-04-19 00:53:04
863
3
原创 window.location.search转对象 - URLSearchParams
let urlSearch = new URLSearchParams(window.location.search);// 返回单个console.log(urlSearch.get("字段名"))// 返回数组console.log(urlSearch.getAll("字段名"))详情看这里
2022-04-12 18:36:45
758
原创 cookie与session
cookie浏览器在电脑硬盘中开辟的一块空间,主要供服务器端存储数据当客户端第一次请求的时候是没有cookie的,只有服务器端接收到请求作出响应后,接下来的请求才会携带着cookiecookie中的数据是以域名的形式进行区分的cookie中的数据是有过期时间的,超过时间会被浏览器自动删除cookie中的数据会随着请求被自动发送到服务器端session实际上就是一个对象,存储在服务器端的内存中,在session对象中也可以存储多条数据,每一条数据都有一个sessionid做唯一标识在nod
2022-04-11 10:35:53
116
原创 第三方模块 - 密码加密bcrypt
哈希加密是单程加密方式:123 => abcd 即只能加密不能解密在加密的密码中加入随机字符串可以增加密码被破解的难度// 导入bcryptconst bcrypt = require("bcrypt");// 生成随机字符串 gen => generate 生成 salt 盐let salt = await bcrypt.genSalt(10);// 使用随机字符串对密码进行加密let pass = await bcrypt.hash("明文密码",salt);// 密码比对
2022-04-11 00:24:44
127
原创 express-art-template模板引擎
模板引擎为了使art-template模板引擎能够更好的与Express框架配合,模板引擎官方在原art-template模板引擎的基础上封装了express-art-template使用 npm install art-template express-art-template进行安装// 当渲染后缀为art的模板时,使用express-art-templateapp.engine("art",require("express-art-template"))// 设置模板存放目录app.s
2022-04-05 18:56:31
246
原创 express框架
Express框架特性提供了方便简洁的路由定义方式对获取http请求参数进行了简化处理对模板引擎支持程度高,方便渲染动态HTML页面提供了中间件机制有效控制HTTP请求拥有大量第三方中间件对功能进行扩展基本使用// 引入expressconst express = require("express");// 创建网站服务器const app = express();app.get("/",(req,res) => { // 1、send 方法内部会检测响应内容的类型
2022-04-05 18:30:29
535
原创 第三方模块 serve-static - 静态资源服务
功能:实现静态资源访问服务使用步骤:1、引入serve-static模块获取静态资源服务功能的方法2、调用方法创建静态资源服务并指定静态资源服务目录3、启用静态资源服务功能const serveStatic = require("serve-static");const serve = serveStatic("public");server.on("request",(req,res) => { serve(req,res,()=>{})})server.listen(3
2022-04-04 20:05:24
893
原创 第三方模块router - 路由
功能:实现路由使用步骤:1、获取路由对象2、调用路由对象提供的方法创建路由3、启用路由,使路由生效const getRouter = require("router");const router = getRouter();router.get("/add",(req,res) => { res.end("ok")})server.on("request",(req,res) => { router(req,res)})...
2022-04-04 16:49:13
189
原创 art-template模板配置
向模板中导入变量template.defaults.imports.变量名 = 变量名设置模板的根目录template.defaults.root = "根目录路径"设置了模板的根目录之后,就不需要每次都拼接模板的路径template.defaults.root = path.join(__dirname,"./views");设置模板的默认后缀名,如果没有后缀,则会自动添加后缀名template.defaults.extname = "art"...
2022-04-04 16:18:22
201
原创 art-template 模板引擎 - 语法
art-template基本使用1、npm install art-template2、引入模板引擎const template = require("art-template")3、告诉模板引擎要拼接的数据和模板在哪const html = template("模板路径",数据)这是js文件const template = require("art-template");const path = require("path");// 参数1:模板的路径,使用绝对路径// 参数2:要在模板中
2022-04-03 15:05:15
1462
原创 node操作mongodb数据库 -集合关联
通常不同集合的数据之间也是有关联的,例如文章信息和用户信息存在不同的集合中,但是文章是某个用户发表的,要查询文章的所有信息包括发表用户,就需要用到集合关联使用id对集合进行关联使用populate方法进行关联集合查询const mongoose = require("mongoose");//连接数据库mongoose.connect("mongodb://localhost/playground").then(() => { console.log("连接成功")}).ca
2022-03-30 21:31:14
971
原创 node操作mongodb数据库 - mongoose验证规则
mongoose 验证required:truemaxlength / minlengthmin / maxenum:[“a”,“b”,“c”]trim:truevalidatedefault在创建集合规则时,可以设置当前字段的验证规则,验证失败则输入插入失败验证规则的值基本上都可以用数组的形式:[值,“提示信息”]1、字符串required:true (必传字段)值可以是bool值,也可以是数组,值为数组时下标为0的值是bool值,为1的是提示信息const mongoose
2022-03-30 15:39:25
1964
原创 nodejs操作mongodb数据库 - 连接数据库和增删改查
连接数据库nodejs连接数据库需要借助第三方库 mongoosenpm install mongooseyarn add mongoose使用mongoose提供对的connent方法即可连接数据库// mongodb协议 地址 数据库名(没有的话会自动创建)mongoose.connect("mongodb://localhost/playground") .then(() => console.log("数据库连接成功")) .catch(e => cons
2022-03-29 22:35:34
1968
原创 Mongodb学习笔记 -环境搭建
临时启动1.下载mogodb2.在mongodb的bin所在目录下找到data文件夹(没有的话新建一个data文件夹)3.在data文件下新建db目录4.在cmd中cd到bin目录下,执行命令mongod --dbpath ../data/db到此为止服务就启动了注册服务进入到mongodb的bin目录下执行以下命令mongod --dbpath “C:\Program Files\MongoDB\Server\5.0\data”–logpath “C:\Program Files..
2022-03-29 17:49:27
403
原创 Mongodb学习笔记 - 常用命令
数据库(db)的操作db / db.getName() 查询当前所在的数据库show dbs 查询所有数据库use 数据库名 创建切换数据库(若use的数据库不存在,则会直接创建数据库并切换)db.stats() 查看当前数据库的状态(详细信息)db.version() 查看当前数据库的版本db.getMongo() 查看当前数据库的链接机器地址db.dropDatabase() 删除当前数据库(只能删除当前所在的数据库)集合(collection)的操作db.createColle
2022-03-29 15:07:50
118
原创 Gulp学习笔记 - 常用插件
gulp-htmlmin: html文件压缩gulp-file-include:公共文件包含// html 任务const htmlmin = require("gulp-htmlmin");// 抽取html文件中的公共代码// 压缩html代码const fileinclude = require("gulp-file-include");gulp.task("htmlmin",() => { gulp.src("./src/*.html") // 先抽离后压缩.
2022-03-28 20:27:30
108
原创 Gulp学习笔记- 基本使用
Gulp使用1.npm install gulp --save-dev / yarn add gulp --save-dev2.在项目根目录下建立gulpfile.js文件3.重构项目的文件夹结构,src放置源代码文件,dist目录放置构建后文件4.在gulpfile.js中编写任务5.在命令行工具中执行gulp任务Gulp中提供的方法gulp.src() 获取任务要处理的文件gulp.dest() 输出文件gulp.task() 建立gulp任务gulp.watch(); 监控文件的
2022-03-28 17:50:21
143
原创 Iterator 和 for ... of 循环
基本概念:在ES6中新增了Set和Map两种数据结构,再加上js之前原有的数组和对象,这样就有了四种数据集合,平时还可以组合使用他们,定义自己到的数据结构,比如数组的成员是Map,Map的成员是对象等。这样就需要一种统一的接口机制,来处理所有不同的数据结构Iterator 就是这样一种极致。他是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作,二期二这种遍历操作是依次出里改数据结构的所有成员Iterator 遍历器的作用:为各种数据结
2022-03-26 12:07:23
140
原创 数据结构-Map
map 是一种典型的字典类型的数据结构字典: 是用来存储不重复key的Hash结构(对象就是字典类型的数据结构)。不同于集合(Set)的是,字典用的是[键,值]的形式来储存数据的。JS的对象(Object:{})只能用字符串当作键。这给他的使用带来的很大的限制为了解决这个问题,ES6提供了Map数据结构,它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键,也就是说,Object结构提供了“字符串-值”的对应,Map结构提供了“值-值”的对应,是一种更完善
2022-03-25 20:27:54
4093
原创 数据结构-Set
集合的基本概念:集合是由一组无序且唯一(即不能重复)的项组成的,这个数据结构使用了与有限集合相同的数学概念,应用再计算机的数据结构中。特点:key 和 value 相同,没有重复的valueES6提供了数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值如何创建一个Setconst s = new Set([1,2,3]);console.log(s);Set类的属性// size 相当于数组的length 属性console.log(s.size); // 3
2022-03-25 13:40:07
1836
原创 ts抽象类(abstract)
声明一个抽象类要用abstract关键字来声明,抽象类中的方法也必须是抽象方法,要用abstract来声明,且抽象类不能被直接实例化,只能被子类继承,而且需要重新实现抽象类中的抽象方法abstract class Parent{ constructor(public name: string){} public abstract getName(): void}class Child extends Parent{ constructor(name: string) { supe
2022-03-23 16:57:36
1993
原创 ts的class类
声明一个类class Point { public x: number public y: number constructor(x: number,y: number) { this.x = x; this.y = y; } public getPosition () { return `(${this.x},${this.y})` }}const point = new Point(1,2);console.log(point);修饰符pu
2022-03-22 22:01:10
753
原创 ts学习笔记 - 类型谓词
type Fish = { name: string, swim: () => void}type Brid = { name:string, fly: () => void}const isFish = (pet: Fish | Brid): pet is Fish => { return (pet as Fish).swim !== undefined}const getSmallPet = (): Fish | Brid => { le
2022-03-10 13:28:33
453
1
原创 ts学习笔记 -控制流分析
代码:const example = () => { let x: string | number | boolean x = Math.random() < 0.5 console.log(x); if (Math.random() > 0.5){ x = 10; } else { x = "Hello "; } return x;}let z = example();z = 10;z = "123";// 有问题 TS2322
2022-03-10 12:05:39
165
原创 ts学习笔记 - 类型断言
类型断言在编译时被删除,所以没有与类型断言相关联的运行时检查as 关键字(推荐)const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement; // any 和 unknow 都可以,推荐unknow// const x = ("Hello" as unknown) as Number;const x = ("Hello" as any) as Number;<类型>const m
2022-03-09 13:40:05
201
原创 ts - 接口(interface)和类型别名(type)的区别
接口/类型别名的扩展(继承)接口(interface)使用extends关键字interface Animal { name: string}interface Bear extends Animal{ honey: boolean}const bear: Bear = { name: "winie", honey: true}console.log(bear.name);console.log(bear.honey);类型别名(type)使用&符
2022-03-09 13:16:09
1025
原创 ts学习笔记 - 接口(interface)
声明接口interface IVegetables { color:string, type:string}调用的时候必须两个属性都有const tomato:IVegetable = { color:"red", type:"tomato"}
2022-03-09 13:00:17
483
原创 Nodejs学习笔记 - fs模块
引入fs模块const fs = require("fs");fs 文件夹curd添加文件夹一次只能创建一个,每次创建的都是路径最后的一个文件,如果一次创建多个会报错fs.mkdir("./logs",(err) => { if(err) throw err; console.log("创建成功");})修改文件夹名字fs.rename("./logs","./log",(err) => { if(err) throw err; console.log("创建成功")
2022-03-01 16:37:12
181
原创 HTTP学习笔记 - HTTP 解决了什么问题
低门槛可扩展性:巨大的用户群体,超长的寿命分布式系统下的Hypermedia:大粒度数据的网络传输Internet 规模无法控制的scalability不可预测的负载、非法格式的数据、恶意消息客户端不能保持所有服务器信息,服务器不能保持多个请求间的状态信息独立的组件部署:新老组件并存向前兼容:自1993年器HTTP0.9\1.0(1996) 已经被广泛使用...
2022-02-28 12:53:36
163
原创 Nodejs学习笔记 - 版本号
npm outdated查看过期了的包(也不能说过期,反正版本号不是最新的,就那么个意思)QWQnpm update更新那个包(语言组织能力有点差,理解就行了 QWQ )进入正题了哇。。。。版本号eg: 13.1.4上边的版本号共分为3块:1.major: 13 (主版本一更新,一般都是大的更新)2.minor: 1 (次版本号一般就是加一些新功能,做一些精进)3.patch: 4 (就是个打补丁,一般偶数比较稳定)npm 版本符号“^”: 锁定到major(主版本号),使用 n
2022-02-15 23:26:10
691
原创 Nodejs - url
parse() / new URL()都是用来解析url的:用法:1、parse()const url = require("url");const urlString = "http://www.baidu.com:443/path/index.html?id=2#tag=3";logger.debug(url.parse(urlString));结果是这样的:[2022-01-22T20:43:46.471] [DEBUG] cheese - Url { protocol: 'ht
2022-01-22 20:58:15
646
原创 Vue的 v-once 指令 (只在首次加载时更新一次内容)
v-once作用:专门标记一个元素只在首次加载时更新一次内容,之后,即使变量发生变化,元素内容也不更新。原理:new Vue()扫描到 v-once 后,只更新一次v-once所在元素的内容,并且不会将v-once加入虚拟DOM树,今后,即使变量值发生变化,也无法通知到v-once所在的元素,自然不会更新元素的内容优化: 如果今后发现个别元素只需要在首次页面加载更新一次,之后不会在更新,都可以用v-once标记,进一步减少虚拟DOM树种元素的个数,进一步提高虚拟DOM树的效率代码:<!D
2021-09-25 19:19:49
1076
原创 在new Vue()加载之前隐藏元素
Vue的v-cloak作用:在new Vue()加载之前,隐藏元素的特殊指令a. 必须手动在样式表中添加 [v-cloak] {display:none},[v-cloak] 这个中括号是css的属性选择器,选择所有带有v-cloak的属性b. 要在暂时隐藏的元素上,添加v-cloak指令。...
2021-09-25 18:23:12
531
原创 VUE框架是如何实现MVVM设计模式的:VUE的绑定原理
VUE框架是如何实现MVVM设计模式的:VUE的绑定原理创建new Vue()对象,做了两件事:(1) 隐藏data中的原变量,为每个变量创建访问器属性,从此,在new Vue中使用的任何变量其实都是访问器属性。(2)引入methods 并打散methods为多个函数,因此原methods中的函数不在隶属于methods,而是直接隶属于new Vue()对象。所以,methods中的函数打散后与访问器属性平级,以后methods中的方法想访问访问器属性变量,就需要加this。new Vue(
2021-09-25 16:45:27
107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人