SchemaType

SchemaType可以直接声明 schema type 为某一种 type,或者赋值一个含有 type 属性的对象。const schema1 = new Schema({ test: String // `test` is a path of type String }) const schema2 = new Schema({ test: { type: String } // `test` is a path of type string })全部可用required: 布尔值或函数 如果值为真,为此属性添加 required 验证器default: 任何值或函数 设置此路径默认值。如果是函数,函数返回值为默认值select: 布尔值 指定 query 的默认 projectionsvalidate: 函数 adds a validator function for this propertyget: 函数 使用 Object.defineProperty() 定义自定义 getterset: 函数 使用 Object.defineProperty() 定义自定...

iconfont 图标当前页面一键加入购物车

图标当前页面一键加入购物车const iconList = document.querySelectorAll('#magix_vf_main > div.wrap > div.page-collection-detail-wrap > div.collection-detail > ul li') for(icon of iconList) { icon.querySelector('div.icon-cover > span.cover-item.iconfont.cover-item-line.icon-gouwuche1').click() }图标名数组(项目页)const iconList = document.querySelectorAll('#J_project_detail > div.project-iconlist > ul li') let icons = {} for(icon of iconList) { icons[icon.querySelector('span.icon-name').inne...

npm包管理命令

[toc]发布npm包注册npm使用npm 命令注册:npm adduserUnable to authenticate, need:Basic // 用户名已被注册账号登录npm login发布包,上传到npm包服务器npm publish注意:如果报错:'You do not have permission to publish "mypackage1". Are you logged in as the correct user?'表示包’mypackage1‘已经在包管理器已经存在被别人用了,需要更该包名称注意:如果发布时报错:‘no_perms Private mode enable, only admin can publish this module:’表示当前不是原始镜像,可能用的是其他镜像,如淘宝镜像,要切换回原始的npm镜像,命令:npm config set registry https://registry.npmjs.org/,如果用了nrm工具,使用命令:nrm use npm 切换更新包 npm version patch 该命令在原来的版本上自...

node.js

[toc]url使用 url 的 parse 方法// 1. 引入 url 模块 var url = require("url"); // 2. 引入 http 模块 var http = require("http"); // 3. 用 http 模块创建服务 /** * req 获取 url 信息 (request) * res 浏览器返回响应信息 (response) */ http.createServer(function (req, res) { // 4. 获取服务器请求 /** * 访问地址是:http://localhost:3000/?userName=jsliang&userAge=23 * 如果你执行 console.log(req.url),它将执行两次,分别返回下面的信息: * / ?userName=jsliang&userAge=23 * / /favicon.ico * 这里为了防止重复执行,所以排除 req.url == /favicon...

前端优化

Object.freeze这算是一个性能优化的小技巧吧。在我们遇到一些 big data的业务场景,它就很有用了。尤其是做管理后台的时候,经常会有一些超大数据量的 table,或者一个含有 n 多数据的图表,这种数据量很大的东西使用起来最明显的感受就是卡。但其实很多时候其实这些数据其实并不需要响应式变化,这时候你就可以使用 Object.freeze 方法了,它可以冻结一个对象(注意它不并是 vue 特有的 api)。 当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter,它们让 Vue 能进行追踪依赖,在属性被访问和修改时通知变化。 使用了 Object.freeze 之后,不仅可以减少 observer 的开销,还能减少不少内存开销。相关 issue。 使用方式:this.item = Object.freeze(Object.assign({}, this.item)) 这里我提供了一个在线测速 demo,点我。 通...

moment

计算两个时间段的时间差const diff = moment(endTime).diff(moment(startTime), 'days') // 天数差

Module

ModuleES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict";。export 命令模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口。import命令用于输入其他模块提供的功能。一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。export输出变量的写法:// profile.js export var firstName = 'Michael'; export var lastName = 'Jackson'; export var year = 1958;还可以:// profile.js var firstName = 'Michael'; var lastName = 'Jackson'; var year = 1958; export {firstName, lastName, year}; //跟上面写法等价,推荐这种写法。export命令除了输出变量,还可以输出函数或类(c...

Class

Class用法class跟let、const一样:不存在变量提升、不能重复声明...es5面向对象写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习这门语言的程序员感到困惑。ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。//es5 function Fn(x, y) { this.x = x; this.y = y; } Fn.prototype.add = function () { return this.x + this.y; }; //等价于 //es6 class Fn{ constructor(x,y){ this.x = x; this.y = y; } add(){ return this.x + this.y; } } var F = new F...

async 函数

async 函数含义ES2017 标准引入了 async 函数,使得异步操作变得更加方便。async 函数是 Generator 函数的语法糖。什么是语法糖?意指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法。语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读。不过其并没有给语言添加什么新东西。反向还有语法盐:主要目的是通过反人类的语法,让你更痛苦的写代码,虽然同样能达到避免代码书写错误的效果,但是编程效率很低,毕竟提高了语法学习门槛,让人齁到忧伤。。。async函数使用时就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。async函数对 Generator 函数的区别:(1)内置执行器。Generator 函数的执行必须靠执行器,而async函数自带执行器。也就是说,async函数的执行,与普通函数一模一样,只要一行。(2)更好的语义。async和await,比起星号和yield,语义更清楚了。async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。(3)正常情况下,...

Generator

Generator简介基本概念Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。跟普通函数的区别function关键字与函数名之间有一个星号;函数体内部使用yield表达式,定义不同的内部状态。Generator函数不能跟new一起使用,会报错。function* helloWorldGenerator() { yield 'hello'; yield 'world'; return 'ending'; } var hw = helloWorldGenerator();上面代码定义了一个 Generator 函数helloWorldGenerator,它内部有两个yield表达式(hello和world),即该函数有三个状态:hello,world 和 return 语句(结束执行)。调用 Generator 函数后,该函数并不执行,返回的...