node发送邮件
node 发送邮件准备工作为了实现这个功能,你首先要有一个邮箱;由于需要使用 SMTP 方式发送,你还需要开启相关功能。你可以登录你的邮箱,然后开启这个设置,以 QQ 邮箱为例(其他邮箱也差不多,主要开启服务获取到授权码就可以了):
2.安装模块 nodemailer(当然也有其他的邮件模块,可以自行选择)
1npm install nodemailer --save
引入模块1const nodemailer = require('nodemailer');
简单配置(这里只是一些简单的配置项,更多配置请查看官网,其实都是大同小异,需要什么添加什么就可以了)12345678910111213let config = { service: 'qq', // host: "smtp.qq.com", //邮箱服务的主机,如smtp.qq.com port: '465', //对应的端口号 secureConnection: true, //secureConnection:false ...
ES6 异步解决方案 async 函数
ES6 异步解决方案 async 函数Generator 函数要说到 async 函数就得从 Generator 函数说起,Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。Generator 函数有多种理解角度。从语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。
形式上,Generator 函数是一个普通函数,但是有两个特征。一是,function 关键字与函数名之间有一个星号;二是,函数体内部使用 yield 语句,定义不同的内部状态(yield 语句在英语里的意思就是“产出”)。
1234567function* ImGenerator() { yield 'hello'; yield 'world'; return 'ending ...
ES6异步解决方案async函数
ES6 异步解决方案 async 函数Generator 函数要说到 async 函数就得从 Generator 函数说起,Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。Generator 函数有多种理解角度。从语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。
形式上,Generator 函数是一个普通函数,但是有两个特征。一是,function 关键字与函数名之间有一个星号;二是,函数体内部使用 yield 语句,定义不同的内部状态(yield 语句在英语里的意思就是“产出”)。
1234567function* ImGenerator() { yield 'hello'; yield 'world'; return 'ending ...
ES6异步解决方案Promise
ES6 异步解决方案 PromiseParmisePromise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
Promise 对象有以下两个特点。
(1)对象的状态不受外界影响。Promise 对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和 Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。
(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise 对象的状态改变,只有两种可能:从 Pending 变为 Resolved 和从 Pending 变为 Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对 Promise 对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。
有了 Promise ...
ES6之对象方法
ES6 之对象方法Object.is()与严格比较运算符(===)的行为基本一致。
1234Object.is('obj', 'obj')// trueObject.is({}, {})// false
不同之处只有两个:一是+0 不等于-0,二是 NaN 等于自身。
12345+0 === -0 //trueNaN === NaN // falseObject.is(+0, -0) // falseObject.is(NaN, NaN) // true
当然我们也可以用 ES5 的方法来实现该方法,原理还是利用严格运算符(===),只是特殊的情况进行特殊处理。
12345678910111213Object.defineProperty(Object, 'is', { value: function(x, y) { if (x === y) { // 针对+0 不等于 -0的 ...