- 博客(80)
- 收藏
- 关注
原创 mongoose使用aggregate
orders表的Schemagoods表的Schemaaggregate聚合管道的使用orders表的Schemavar OrderSchema = mongoose.Schema({ order_id: { type: String, }, uid: { type: String, }, trade_no: { type: String, }, all_price: { ..
2021-11-06 16:32:59
1034
原创 mongoose校验数据
Schema的数据校验required-必填校验长度校验大小校验enum-枚举校验match-正则匹配validate-自定义校验规则Schema的数据校验在定义Schema数据模式的时候,可以对字段的值进行数据校验;确保满足条件的数据才会被添加到数据库中。required-必填校验针对与任意类型,指定的字段必须传入var userSchema = mongoose.Schema({ name: { type: String, re..
2021-11-06 16:26:23
950
原创 mongoose中Schema的拓展
Schema的默认参数Schema设置索引Schema设置预定义模式修饰符Schema自定义修饰符Schema的默认参数在定义Schema数据模式的时候,可以为字段设置默认值;如果新增的时候,没有设置该字段的值,那么就会使用默认参数;var userSchema = mongoose.Schema({ name: String, age: Number, isUse: { type: Boolean, default: true..
2021-11-06 15:28:16
836
原创 mongoose的模块化及Model静态方法和实例方法的扩展
mongoose模块化的步骤封装链接方法封装Model方法使用Model方法mongoose模块化的步骤第一步 封装mongoose连接mongodb数据库的方法第二步 封装collection结合对应模块的Model第三步 使用Model封装链接方法// db.jsconst mongoose= require("mongoose")mongoose.connect("mongodb://127.0.0.1:27017/pmis", (err) => { ..
2021-11-06 14:42:14
652
原创 mongoose实现增删改查
Node.js使用mongoosemongoose操作数据的步骤定义数据模式Schema定义数据模型Model调用具体的操作方法mongoose实现数据的增删改查查询数据新增数据更新数据updateOneupdateManyfindOneAndUpdatefindByIdAndUpdate删除数据Node.js使用mongoose第一步:安装mongoose,npm install mongoose第二步:引入mongoose,const mong..
2021-11-06 14:25:22
2092
原创 express实现文件上传
express使用multer插件自定义multer配置multer实现多字段文件上传express使用multer插件在不使用三方中间件的情况下,虽然可以使用form表单上传文件,但是无法将文件保存到静态文件资源目录中去第一步:安装multer;npm install multer --save第二步:引入multer; const multer = require('multer')第三步:实例化multer第四步:在路由中使用使用multer的时候,需要在form表..
2021-10-27 23:18:03
3000
原创 express模块化以及模板生成器
express模块化express模板生成器启动模板项目模板项目的结构生成模板的参数express模块化使用express框架提供的Router方法,可以实现路由的模块化,使得项目结构更加清晰路由的模块化可以实现嵌套,即子模块中还可以继续使用其他路由模块// menu.js 菜单模块相关的接口const express = require('express')const menu = express.Router()menu.get("/", (req, res) ..
2021-10-27 23:17:21
383
原创 express中使用session
express中使用sessionsession的增删改查新增、编辑、查询删除session的分布式存储(存储到数据库)express中使用session利用express-session中间件,可以使用session来缓存信息第一步:安装中间件;npm install express-session --save第二步:引入中间件;const session = require("express-session")第三步:使用中间件;app.set('trust ..
2021-10-27 23:16:33
714
原创 express中使用cookie
express中使用cookiecookie-parser的配置项参数分析express中使用cookie利用cookie-parser中间件,可以使用cookie进行信息的缓存第一步 npm install cookie-parser --save第二步 引入中间件 const cookieParser = require("cookie-parser")第三步 使用中间件 app.use(cookieParser())// 设置cookie 键名 键值 配置res.coo..
2021-10-22 00:16:45
668
原创 express中使用ejs模板
express使用ejs模板express配置ejs模板引擎的文件夹express修改ejs模板引擎的后缀名express托管静态资源文件ejs渲染数据ejs模板绑定数据ejs模板渲染HTMLejs模板的条件判断ejs模板的for循环ejs模板引入外部文件(公共组件)express使用ejs模板第一步 npm install ejs --save第二步 app.set('view engine', 'ejs')第三步 使用(默认加载模板引擎的文件夹是views..
2021-10-22 00:16:08
960
原创 express中间件
express中间件中间件的分类应用级中间件路由级中间件错误处理中间件配置静态web资源目录、解析请求参数等功能第三方中间件express中间件中间件就是匹配路由之前,或者匹配路由完成以后执行的一系列的操作,中间件如果想要往下匹配的话,需要执行next中间件的分类应用级中间件匹配路由,用于权限判断,可以做一些全局处理的业务// 实现每次访问路由 访问次数加一的功能var visitNum = 0;app.use((req, res, next) => {..
2021-10-22 00:15:14
145
原创 express路由
nodejs使用expressexpress的路由四种请求形式多级路由动态路由get传值post传值nodejs使用express第一步:下载express npm install express --save第二步:引入express const express = require("express")第三步:实例化express const app = express()express的路由四种请求形式get请求 一般用于获取数据app.get("/",..
2021-10-22 00:14:00
135
原创 Node.js-fs模块
fs模块的方法分类按操作类型分类按操作对象分类fs模块的方法列表fs.stat() 检测是文件还是目录fs.mkdir() 创建目录fs.writeFile() 创建并写入文件fs.appendFile() 追加文件内容fs.readFile() 读取文件fs.readdir() 读取文件和目录 只会读取一层 不会递归读取fs.rename() 重命名 或者 移动文件fs.rmdir() 删除目录fs.unlink() 删除文件fs模块的方法分类按操作类型分类..
2021-10-12 20:37:52
243
原创 Node.js-模块
模块和自定义模块nodejs采用commonjs标准对模块进行导出和导入commonjs导出的两种形式第一种:使用exports.变量的形式第二种:使用module.exports = 变量的形式exports导出模块 相当于在exports对象上添加变量module.exports导出模块 相当于导出的内容就是exports对象// 导出文件function formatApi (api) { return `http://www.baidu.com${api}`}f
2021-10-12 20:24:24
94
原创 Node.js-url模块
可以对客户端传递的url地址的处理const http = require('http')const url = require('url')http.createServer(function(req, res) { // 通过parse方法可以对地址进行解析 query就是客户端传递的参数 var query = url.parse(req.url).query res.writeHead(200, {'Content-Type': 'text/html;char.
2021-10-12 20:23:31
212
原创 Node.js-http模块
// 引入nodejs的核心模块httpconst http = require('http')// createServer方法创建一个应用http.createServer(function(req, res) { // req 获取客户端传过来的信息 // res 返回给浏览器的信息 // 设置返回的状态码 文本类型 以及编码格式 res.writeHead(200, {'Content-Type': 'text/html;charset="utf-8"'})
2021-10-12 20:21:48
92
原创 ES6-import和export
ES6模块化的概述export命令export导出变量的两种形式export导出时使用 as 关键字重命名export导出的注意点export default命令import命令import + export 导出变量import + export default 导出变量import导入变量的注意点export与import的复合写法ES6模块化的概述模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令..
2021-09-26 23:05:38
2868
1
原创 ES6-Class类的继承
ES5实现类的继承Class类实现继承constructor和super函数Class类静态方法的继承Object.getPrototypeOf()super关键字super函数调用Super对象使用类的prototype属性和__proto__属性ES5实现类的继承实质是先创造子类的实例对象this,然后再将父类的方法添加到this上面,Parent.apply(this)。function Phone(brand, price) { this.brand..
2021-09-22 23:22:08
169
原创 ES6-Class类的基本语法
Class类的简介使用Class类的注意点setter和getter函数静态方法new.target属性Class类的简介ES6引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。可以当做一个语法糖,绝大多数功能,ES5都可以做到。ES5通过构造函数生成示例对象function Phone (brand, price) { this.brand = brand; this.price = price;}Phone.prototy..
2021-09-21 16:48:26
258
原创 ES6-Set和Map数据结构
Set数据结构Set实例的属性和方法属性方法Set结构的遍历操作keys() values() entries()forEach()遍历的应用遍历修改数据源Map数据结构Map结构赋值的一些注意点Map的实例属性和操作方法Map结构的遍历操作Map结构与其他数据结构的转换Set和Map的区别Set数据结构Set是ES6提供的一种新的数据结构,类似于数组,但是成员值都是唯一的,没有重复值;Set本身就是一个构造函数,用来生成Set数据结构//..
2021-09-15 23:45:54
312
原创 ES6-Promise及源码实现
开头说明promise实例化对象的属性值 [promiseState]promise实例化对象的属性值 [promiseResult]promise的APIPromise的构造函数 [Promise(executor){}]Promise.prototype.then方法 [(onResolved, onRejected){}]Promise.prototype.catch方法 [(onRejected){}]Promise.resolve方法 属于Promise函数对象 [(value..
2021-09-13 00:32:24
497
原创 ES6-Generator与异步应用
Generator函数简介基本概念语法上理解定义形式上理解基本示例Generator和iterator的关联yield语句yield语句使用的注意事项yield语句和return语句的比较yield* 语句yield* + 无return的Generator函数yield* + 有return的Generator函数yield* + array/string/Set/Map/nodeList/argumentsnext方法next方法的运行逻辑next方..
2021-09-13 00:20:07
273
原创 ES6-iterator和for...of循环
iterator的基本介绍概念作用遍历器对象的属性遍历过程原生用于iterator接口的数据默认调用iterator接口的场合基础示例自定义部署iterator接口普通对象类数组对象类部署iterator接口的实例遍历器实现指针结构for…in和for…offor…in循环的几个缺点for…of循环的几个优点iterator的基本介绍概念iterator(遍历器) 是一种接口,为不同的数据结构提供统一的访问机制。任何数据结构只要部署了itera..
2021-09-11 16:37:37
176
原创 ES6-数组扩展
1. Array.from()参数分析操作对象类数组对象可迭代对象2. Array.of()3. copyWithin()4. find() 和 findIndex()5. fill()6. for … of循环7. includes()8. 数组合并的几种方式for循环 + pushconcat()push.apply()push + …(拓展运算符)…(拓展运算符)1. Array.from()将一个类似数组或可迭代对象创建一个新的,浅拷贝..
2021-09-05 15:34:25
404
原创 ES6-Symbol类型
Symbol类型特点创建Symbol类型的变量Symbol类型的运算和对比创建Symnol类型的对象属性获取对象属性的几种方式Symbol类型特点Symbol的值是唯一的,用来解决命名冲突的问题Symbol值不能与其他数据进行运算Symbol定义的对象属性不能使用for...in 循环遍历,但是可以使用Reflect.ownKeys来获取对象的所有键名创建Symbol类型的变量通过new Symbol()来创建// 创建Symbollet s = Symbol()c..
2021-09-04 23:37:08
115
原创 ES6-对象拓展
1: 同名赋值(简洁表达式)2: 属性名表达式注意点3. Object.is() 同值相等实现原理4. Object.assign()基本实例同名属性的合并合并引用类型的变量JQuery的extend方法5. Object.keys Object.values Object.entries6. __proto__7. …(拓展运算符和rest运算符)拓展运算符rest运算符8. Object.getOwnPropertyDescriptor()..
2021-09-03 16:30:33
257
原创 ES6-函数拓展
1. rest操作符和拓展运算符rest操作符…拓展运算符用途2. 解构赋值和默认赋值解构赋值默认赋值解构赋值和默认赋值配合使用3. 箭头函数示例定义使用方法注意事项1. rest操作符和拓展运算符rest操作符ES6引入 rest参数, 代替arguments变量, 用于获取函数的实参// ES5获取函数实参的方法function add() { // 类数组 console.log(arguments)}add(1..
2021-08-29 16:25:51
163
原创 ES6-模板字符串(标签模板-XSS攻击)
1. 模板字符串保存字符串中的格式使用变量/常量或者表达式/方法2. 标签模板 函数调用的特殊形式使用形式过滤HTML字符串 防XSS攻击1. 模板字符串ES6中引入的新的声明字符串的方式 xxxxx ES5声明字符串的方式 '' 和 ""保存字符串中的格式可以在内容中出现换行符var str = ` <div>1</div> <div>2</div> <p>3</p&..
2021-04-11 22:58:06
463
原创 ES6-解构赋值
1.数组的解构赋值定义形式解析结果默认赋值2.对象的解构赋值解析形式注意点嵌套解构赋值默认赋值3.字符串的解构赋值4.数值和布尔值的解构赋值5.undefined 和 null6.解构赋值的作用交换变量接收函数返回的多个函数值函数参数的定义提取json数据1.数组的解构赋值定义ES6允许按照一定的模式,将属性/值从对象/数组中取出,赋值给其他变量形式数组的解构赋值是根据顺序来的 有序的var [a,b,c] = [1,2,3] ..
2021-04-03 18:52:11
288
原创 JS的toString方法
基本数据类型基本数据类型调用toString方法,都是先调用包装类,然后调用包装类上的toString方法Number.prototype.toString === new Number(123).__proto__.toStringString.prototype.toString === new String('hello').prototye.toStringBoolean.prototype.toString === new Boolean('hello').prototye.toStri
2021-03-30 22:00:58
553
原创 H5调用Android和IOS原生方法(vue/uni-app)
Android调用Android原生方法 直接Android.方法名就可以,方法名由原生提供IOS首先在created方法中全局挂载IOS指定的返回函数,用以接收返回数据再去调用IOS的方法 window.webkit.messageHandlers.方法名.postMessage(params) params是传递的参数(如果需要的)uni-app实际开发中 需要在created中注册 onLoad中注册无法生效以调用原生方法获取经纬度为示例export default .
2021-01-25 15:43:30
3108
1
原创 模块化实现方式之ES6
ES6模块化 - import 和 export一、基本语法导出模块导入模块实例代码二、实现(浏览器端)安装babel相关的内容配置.babelrc文件编译使用import的js文件ES6模块化 - import 和 export依赖模块需要编译打包处理 兼容不支持ES6的浏览器使用babel将ES6转换成ES5以后,还需要使用browserify编译,浏览器不识别require语法一、基本语法导出模块export导出形如:export le..
2021-01-21 10:01:41
234
1
原创 模块化实现方式之CMD
定义暴露模块定义没有依赖的模块定义有依赖的模块同步引入异步引入引入使用模块CMD模块化 - seajs模块加载时才会加载执行<script type="text/javascript" src="./js/libs/sea.js"></script><script type="text/javascript"> seajs.use("./js/modules/main.js")</script>定义暴露模..
2021-01-21 10:00:42
281
1
原创 模块化实现方式之AMD
AMD模块化 - requirejs一、定义暴露模块二、引入使用模块基本语法配置项 requirejs.config()AMD模块化 - requirejs专门用于浏览器端 模块的加载是异步的和commonjs浏览器使用一致 都需要进行编译才能运行一、定义暴露模块定义没有依赖的模块define(function(){ // xxx returun xxx})定义有依赖的模块/* module1 和 module2 是requirej..
2021-01-21 09:59:24
410
原创 模块化实现方式之CommonJS
CommonJS模块 - module.exports/exports 和 require一、基本语法暴露模块引入模块二、模块化实现服务器端实现浏览器端实现CommonJS模块 - module.exports/exports 和 require每个js文件都可以当做一个模块在服务器端(node):模块的加载是运行时同步加载的在浏览器端:模块的加载需要提前编译打包处理 (browserify)一、基本语法暴露模块/* 暴露的模块的本质是`exports..
2021-01-21 09:58:40
154
原创 模块化的基本知识-发展过程
模块化的基本介绍一、模块化的概念二、模块化的演变过程1. 全局定义函数、变量2. NameSpace模块 - 简单对象封装3. 匿名闭包函数 IFFE模式4. 模块模式(引入依赖)三、模块化的好处模块化的基本介绍一、模块化的概念将一个复杂的程序依据一定的规则(规范)封装成几个块(文件), 并进行组合在一起;模块的内部数据与实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信。二、模块化的演变过程1. 全局定义函数、变量全局函数模式 将不同..
2021-01-21 09:57:27
219
原创 03-TypeScript学习之枚举类型
字面量类型的问题扩展类型-枚举如何定义一个枚举枚举的规则:最佳实践扩展知识:位枚举(枚举的位运算)字面量类型的问题在类型约束位置 会产生重复代码 可以使用类型别名解决该问题let Gender = "男" | "女";let user1Gender = "男";let user2Gender = "女";function getUserGender(g: Gender):[]{ return [];}当字面量类型的值发生修改时 所有赋值给变量的字面量..
2021-01-05 23:42:46
194
原创 02-TypeScript学习之类型约束
如何进行类型约束源代码和编译结果的差异基本类型其他类型联合类型void类型never类型字面量类型元祖类型(Tuple)any类型类型别名函数的相关约束如何进行类型约束仅需要在 变量、函数的参数、函数的返回值后加上:类型 let name: string; function sum(a: number, b: number): number{ return a + b; } let num: number = sun..
2021-01-05 23:41:30
475
原创 04-TypeScript学习之模块化
如何进行类型约束源代码和编译结果的差异基本类型其他类型联合类型void类型never类型字面量类型元祖类型(Tuple)any类型类型别名函数的相关约束如何进行类型约束仅需要在 变量、函数的参数、函数的返回值后加上:类型 let name: string; function sum(a: number, b: number): number{ return a + b; } let num: number = sun..
2021-01-05 23:35:23
229
原创 01-TypeScript学习之环境配置
配置TypeScript的环境安装TypeScripttsc – 编译TS安装@types/node库安装ts-nodenodemon – 监测文件的变化nodemon命令配置成脚本TypeScript的基本介绍超集类型系统可选的静态的(在运行之前)配置TypeScript的环境安装TypeScriptnpm install -g typeScripttsc – 编译TS生成tsc的配置文件 tsc --init/*基本配置*/{ "com..
2021-01-05 23:33:55
278
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人