Node.js学习日记3
1.__filename
解析:__filename
表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同。如果在模块中,返回的值是模块文件的路径。
2.__dirname
解析:__dirname
表示当前执行脚本所在的目录。
3.setTimeout(cb, ms)
解析:setTimeout(cb,ms)全局函数在指定的毫秒(ms)数后执行指定函数(cb)。:setTimeout()只执行一次指定函数。返回一个代表定时器的句柄值。
4.clearTimeout(t)
解析:clearTimeout(t)全局函数用于停止一个之前通过setTimeout()创建的定时器。参数t是通过setTimeout()函数创建的定时器。
5.setInterval(cb, ms)
解析:setInterval(cb,ms)全局函数在指定的毫秒(ms)数后执行指定函数(cb)。返回一个代表定时器的句柄值。可以使用clearInterval(t)函数来清除定时器。setInterval()方法会不停地调用函数,直到clearInterval()被调用或窗口被关闭。
6.process
解析:process是一个全局变量,即global对象的属性。Process也提供了很多有用的属性。
7.Node对象
解析:
常用属性,如下所示:
- childNodes:返回节点的子节点的节点列表
- firstChild:返回节点的首个子节点
- lastChild:返回节点的最后一个子节点
- parentNode:返回节点的父节点
- nextSibling:返回节点之后紧跟的同级节点
- previousSibling:返回节点之前紧跟的同级节点
- nodeName:返回节点的名称,根据其类型
- nodeType:返回节点的类型
- nodeValue:设置或返回节点的值,根据其类型
常用方法,如下所示:
- createElement():创建元素节点
- createAttribute():创建属性节点
- appendChild():向节点的子节点列表的结尾添加新的子节点
- cloneNode():复制节点
- insertBefore():在指定的子节点前插入新的子节点
- removeChild():删除(并返回)当前节点的指定子节点
- replaceChild():用新节点替换一个子节点
- getAttribute():返回指定的属性值
- setAttribute():把指定属性设置或修改为指定的值
8.async本质
解析:async应该是目前nodejs里最简单直白的异步方案了,async函数实际上就是generator函数的语法糖,省掉了callback的回调地狱,generator的yieldnext,promise的.then.catch,使代码看起来更像是同步流程方案,更扁平化。
说明:在async函数中,如果有多个await关键字时,有一个await的状态变成了rejected,那么后面的操作都不会继续执行。await用来串行的执行异步操作,实现并行可以考虑promise.all。
9.Promise
解析:Promise对象代表一个未完成、但预计将来会完成的操作。它有以下三种状态:[1]pending初始值,不是fulfilled,也不是rejected;[2]fulfilled代表操作成功;[3]rejected:代表操作失败。如下所示:
//构建Promise
var promise = new Promise(function (resolve, reject) {if (/* 异步操作成功 */) {resolve(data)} else {/* 异步操作失败 */reject(error)}
})
说明:resolve函数的作用:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
Promise实例生成以后,可以用then方法指定resolved状态和reject状态的回调函数,如下所示:
promise.then(onFulfilled, onRejected)promise.then(function(data) {// do something when success
}, function(error) {// do something when failure
})
then方法会返回一个Promise。它有两个参数,分别为Promise从pending变为fulfilled和rejected时的回调函数[第二个参数非必选]。这两个函数都接受Promise对象传出的值作为参数。简单来说,then就是定义resolve和reject函数。
10.Node.js目录
解析:新建项目结构,如下所示:
[1]bin:项目的启动文件,也可以放其它脚本。
[2]node_modules:用来存放项目的依赖库。
[3]public:用来存放静态文件[css、js、img]。
[4]routes:路由控制器。
[5]views:视图目录[相当于MVC中的V]。
[6]app.js:项目入口及程序启动文件。
[7]package.json:包描述文件及开发者信息。
[8]models:数据模型[相当于MVC中的M]。
[9]controllers:控制器,对请求的操作[相当于MVC中的C]。
[10]tools:工具库。
[11]config:配置目录。
[12]test:测试目录。
[13]README.md:项目说明文件。
11.seneca
解析:seneca是一个nodejs微服务工具集,它赋予系统易于连续构建和更新的能力。
12.moment时间加减
解析:
moment().add(7,'years'); // 加7年
moment().add(7,'month');// 加7个月
moment().add(7,'days'); // 加7天
moment().add(7,'hours'); // 加7小时
moment().add(7,'minutes');// 加7分钟
moment().add(7,'seconds');// 加7秒钟moment().subtract(7,'years'); // 减7年
moment().subtract(7,'month');// 减7个月
moment().subtract(7,'days'); // 减7天
moment().subtract(7,'hours'); // 减7小时
moment().subtract(7,'minutes');// 减7分钟
moment().subtract(7,'seconds');// 减7秒钟
说明:getTime()函数把日期转换成时间戳。
13.Sequelize类库
解析:Sequelize是一个Node.js平台基于Promise的ORM。可以操作管理Mysql、Postgres、SQLite等关系型数据库。
14.SPM编码
解析:用来跟踪页面模块位置的编码,标准spm编码由4段组成,采用a.b.c.d的格式[建议全部使用数字],比如xTao合作伙伴[a=2014]中某个外站appkey为123456789[b=123456789],频道ID为1[c=1],页面ID为2[d=2],那么spm=2014.123456789.1.2,就唯一标识外站123456789的频道1上的页面2,从这个页面点击出去的链接,后面都应该携带spm=2014.123456789.1.2的参数串。这样微商货源网,通过这个编码,就能唯一的定位到一个url是由外站中哪个具体页面点击生成的。
15.__proto__
和prototype[通用规则]
解析:在js中所有的对象都有proto属性[对象,函数],指向构造该对象的构造函数的原型。只有函数function才具有prototype属性。
[1]对象有__proto__
属性,函数有prototype属性
[2]对象由函数生成
[3]生成对象时,对象的__proto__
属性指向函数的prototype属性
16.__proto__
和prototype[通用规则]
解析:
创建空对象时,实际上是用Object函数来生成对象的:
>var o = {}
>o.__proto__ === Object.prototype
true也可以显式的使用Object函数来创建对象:
>var o = Object()
o.__proto__ === Object.prototype
true当使用函数来创建自定义的对象时,上面的规则同样适用:
>function MyObj(){}
>typeof MyObj
"function"
>var mo = new MyObj()
>mo.__proto__ === MyObj.prototype
true
17.__proto__
和prototype[函数对象]
解析:函数自然也是对象的一种,对于函数作为对象来说,上面的规则同样适用:
函数对象都是由Function函数生成的:
>function fn(){}
>fn.__proto__ === Function.prototype
true
把函数当做对象时,生成它的函数就是Function函数。那Function函数本身呢?同样适用:
Function函数本身作为对象时,生成它的函数是它自身
>Function.__proto__ === Function.prototype
true
Object函数也是一个函数对象,同样符合上面的规则:
Object函数既然是函数,那生成它的函数自然是Function函数咯:
>Object.__proto__ === Function.prototype
true
18.__proto__
和prototype[prototype是谁]
解析:
对象的__proto__属性是从生成它的函数的prototype那里得来的,那函数的prototype又是谁?
一般函数默认的prototype是系统自动生成的一个对象:
>function fn(){}
>typeof fn.prototype
"object"
>fn.prototype
{constructor: ƒ}constructor: ƒ fn()__proto__: Object>fn.prototype.constructor === fn
true
>fn.prototype.__proto__ === Object.prototype
true
一般函数默认的prototype是一个类型为"object"的对象,它有两个属性:constructor和__proto__
。其中constructor属性指向这个函数自身,__proto__
属性指向Object.prototype,这说明一般函数的prototype属性是由Object函数生成的。
19.__proto__
和prototype[特殊情况]
解析:
特殊情况主要指的是Object函数和Function函数。Object.prototype如下所示:
>typeof Object.prototype
"object"
>Object.prototype
{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}constructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()__defineGetter__: ƒ __defineGetter__()__defineSetter__: ƒ __defineSetter__()__lookupGetter__: ƒ __lookupGetter__()__lookupSetter__: ƒ __lookupSetter__()get __proto__: ƒ __proto__()set __proto__: ƒ __proto__()
可以看到Object函数的prototype属性也是一个类型为"object"的对象,但和一般函数的默认prototype属性不一样的是,它多了一大堆方法,这些方法都是JavaScript对象的系统默认方法。Object函数的prototype属性里没有__proto__
属性,试着把它的__proto__
属性打出来看看:
>Object.prototype.__proto__
null
Object.prototype.__proto__===null
,这就是JavaScript原型链的终点了。为什么要这样设定呢?
typeof Object.prototype===“object”,说明它是一个Object对象,如果它由Object函数生成,于是按照上面的通用规则,就该是Object.prototype.__proto__===Object.prototype
。这样问题就出现了,Object.prototype.__proto__
属性指向了它自身,这样以__proto__
属性构成的原型链就再也没有终点。所以为了让原型链有终点,在原型链的最顶端,JavaScript规定了Object.prototype.__proto__===null
。
接下来看看Function函数,如下所示:
>typeof Function.prototype
"function"
Function函数的prototype属性是一个"function"类型的对象,而不像其它函数是类型为"object"的对象。那是个什么样的函数呢?
>Function.prototype
ƒ () { [native code] }
函数内部是[nativecode],也就是系统编译好的二进制代码函数,这就暂时没法深究了。现在来看看最关心的__proto__
属性:
>Function.prototype.__proto__
{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}constructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()__defineGetter__: ƒ __defineGetter__()__defineSetter__: ƒ __defineSetter__()__lookupGetter__: ƒ __lookupGetter__()__lookupSetter__: ƒ __lookupSetter__()get __proto__: ƒ __proto__()set __proto__: ƒ __proto__()
看起来很像是Object.prototype,验证如下所示:
>Function.prototype.__proto__ === Object.prototype
true
按照最开始提出的通用规则,一个"function"类型的对象,应该是由Function函数生成的,那它的prototype属性应该指向Function.prototype,也就是Function.prototype.__proto__===Function.prototype
。和Object函数同样的问题出现了:循环引用。所以JavaScript规定Function.prototype.__proto__===Object.prototype
,这样既避免了出现循环引用,又让__proto__
构成的原型链指向了唯一的终点:Object.prototype.__proto__===null
。
20.JavaScript原型链系统图
解析:
21.ObjectId构成
解析:MongoDB采用了一个称之为ObjectId的类型来做主键。ObjectId是一个12字节的BSON类型字符串。按照字节顺序,如下所示:
[1]4字节:UNIX时间戳
[2]3字节:表示运行MongoDB的机器
[3]2字节:表示生成此_id的进程
[4]3字节:由一个随机数开始的计数器生成的值
22.splice()
解析:splice()方法向/从数组中添加/删除项目,然后返回被删除的项目。语法如下所示:
arrayObject.splice(index,howmany,item1,.....,itemX)
说明:splice()方法可删除从index处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。如果从arrayObject中删除了元素,则返回的是含有被删除的元素的数组。
23.cheerio.load
解析:var $ = cheerio.load(html,{decodeEntities:false});如下所示:
[1]可以创建一个和jQuery选择器用法差不多的选择器$。
[2]load函数的第一个参数html就是之前http.get方法中所获得的数据;第二个参数可选,主要是用来设置格式,比如decodeEntities:false设置了不会出现中文乱码。
24.PEM
解析:PEM是OpenSSL和许多其它SSL工具的标准格式,OpenSSL使用PEM文件格式存储证书和密钥。
25.pm2 status
解析:PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。如下所示:
[1]启动一个应用:pm2 start app.js
[2]停止:pm2 stop app_name|app_id
[3]删除:pm2 delete app_name|app_id
[4]重启:pm2 restart app_name|app_id
[5]停止所有:pm2 stop all
[6]查看所有进程:pm2 list
[7]查看所有进程状态:pm2 status
[8]查看某一个进程信息:pm2 describe app_name|app_id
参考文献:
[1]JavaScript标准库:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects
[2]Moment.js[JavaScript日期处理类库]:http://momentjs.cn/
[3]pm2:http://pm2.keymetrics.io/
[4]Moment.js文档:http://momentjs.cn/docs/
Node.js学习日记3相关推荐
- node.js学习笔记
# node.js学习笔记标签(空格分隔): node.js---## 一 内置模块学习 ### 1. http 模块 ``` //1 导入http模块 const http =require('ht ...
- node.js学习笔记14—微型社交网站
node.js学习笔记14-微型社交网站 1.功能分析 微博是以用户为中心,因此需要有注册和登录功能. 微博最核心的功能是信息的发表,这个功能包括许多方面,包括:数据库访问,前端显示等. 一个完整的微 ...
- Node.js学习笔记8
Node.js学习笔记8 HTTP服务器与客户端 Node.js的http模块,封装了一个高效的HTTP服务器和一个简易的HTTP客户端 http.server是一个基于事件的HTTP服务器,核心由N ...
- node.js学习笔记5——核心模块1
node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...
- 《写给PHP开发者的Node.js学习指南》一2.2 预定义的PHP变量
本节书摘来自异步社区<写给PHP开发者的Node.js学习指南>一书中的第2章,第2.1节,作者[美]Daniel Howard,更多章节内容可以访问云栖社区"异步社区" ...
- node.js学习总结:node.js的内置模块,模块化,npm与包 express,前后端身份认证 JWT认证机制
node.js学习总结 什么是node.js node.js的内置模块 fs系统模块 path路径模块 http模块 模块化 npm与包 express express路由 express+mysql ...
- node.js 学习笔记(二)模板引擎和C/S渲染
node.js 学习笔记(二)模板引擎和C/S渲染 文章目录 node.js 学习笔记(二)模板引擎和C/S渲染 一.初步实现Apache功能 1.1 使用模板引擎 1.2 在 node 中使用模板引 ...
- Node.js 学习 ——nodemon 运行报错解决
Node.js 学习 --nodemon 运行报错解决 报错记录 nodemon : 无法加载文件 C:\Users\Administrator.DESKTOP-0RUBNO7\AppDat on.p ...
- 千锋Node.js学习笔记
千锋Node.js学习笔记 文章目录 千锋Node.js学习笔记 写在前面 1. 认识Node.js 2. NVM 3. NPM 4. NRM 5. NPX 6. 模块/包与CommonJS 7. 常 ...
最新文章
- linux fedor 安装 gcc,fedora中如何安装gccsense
- 铁线蕨算法(Adiantum)为低端智能手机提供磁盘加密服务
- Activity平移动画
- 数据结构 树的链式存储(二叉表示法)
- Netty入门系列(1) --使用Netty搭建服务端和客户端
- jasper(二):制作饼状图和柱状图
- 运用PFA的路灯指示牌GUI程序
- LeetCode OJ -Happy Number
- 分布式离线计算—HiveSQL
- php面试中的问题,十个值得深思的PHP面试问题
- WebView退出时停止视频播放
- 18 操作系统第五章 设备管理 IO设备的基本概念和分类 IO控制器 IO控制方式 IO软件层次结构 IO核心子系统 假脱机技术 设备的分配与回收 缓冲区管理
- java爬虫自动识别验证码_简单Java爬虫(一)爬取手机号码
- mkdir: Permission denied: user=root, access=WRITE
- JPA 多条件、多表查询
- 设计素材|美丽的几何和多边形背景纹理
- net core 通过js打印集合(创建树)
- Vmware报错 This product may not be installed on a computer that has Microsoft HyperV installed. 解决
- 1965: 求矩阵中最小元素及其位置
- 好用的python工具_Python哪些工具好用?老男孩Python开发
热门文章
- 什么是高防CDN?高防CDN有哪些作用?
- 京东安联臻爱无限2020,可以带“病”投保的百万医疗险!
- 汽车DC/DC简单介绍
- kafka高性能的原因
- 实在智能RPA学院|切切切词!算法TopWORDS的原理及实现
- python多用户B2C商城系统毕业设计开题报告
- 2022 极术通讯-搭载“星辰”处理器的聆思科技CSK6视觉AI开发套件开发概览
- tuxera NTFS2022让磁盘读写管理格式化更轻松
- Draggable拖拽+Collapse使用(不一样的手风琴)
- OneNet数据可视化View页面上的数据过滤器使用介绍