文档章节

nodejs核心编程笔记

a
 allantaylor81
发布于 2015/03/25 10:27
字数 2097
阅读 98
收藏 9
点赞 0
评论 0

一、全局对象和全局变量

全局对象:global

global最根本的左营是作为全局变量的宿主。按照ECMAScript的定义,

满足以下条件的变量是全局变量。

1、在最外层定义的变量

2、全局对象的属性

3、隐式定义的变量(未定义直接赋值的变量)

当你定义一个全局变量时,这个变量同时也会成为全局对象的属性,反之亦然。

需要注意的是,在node中你不可能在最外层定义变量,因为所有用户代码都是

属于当前模块的,而模块本事不是最外层的上下文。

注意:

永远使用var定义变量以避免引入全局变量,因为全局变量会污染命名空间,提高代码的耦合风险。

全局变量process 描述当前进程状态,提供一个与操作系统的简单接口。

process.argv是命令行参数数组,第一个元素是node,第二个元素是脚本文件名

从第三个元素开始每个元素是一个运行参数。

执行结果

提供标准输入输出流。

执行结果

process.nextTick(callback)的功能是为事件循环设置一项任务,
node会在下次事件循环调用响应的时候调用callback

why?

node适合I/O密集型的应用,而不是计算密集型的应用,

因为一个你的进程只有一个线程

因此在任何时刻都只有一个事件在执行,如果这个事件占用大量的cpu时间,

执行时间循环中的下一个时间就需要等待很久,因此node的一个编程原则

就是尽量缩短每个事件的执行时间,process.nextTick()提供了一个这样的

工具,可以把复杂的工作拆散,变成一个个较小的事件。

执行结果很显然不是同步执行调用的

是在下一个事件循环响应时调用的

console也是全局变量 用于提供控制台标准输出的。

console.log()向标准输出流打印字符并以换行符结束。。console.log 接受若干

个参数,如果只有一个参数,则输出这个参数的字符串形式。如果有多个参数,则

以类似于 C 语言 printf() 命令的格式输出。第一个参数是一个字符串,如果没有

参数,只打印一个换行。

运行结果为:

console.error()与console.log()用法相同,只是向标准错误流输出。

console.trace():向标准错误流输出当前的调用栈

二、常用工具util

util是一个核心模块,提供常用函数的集合,用于弥补核心Javascript的功能过于精简的不足。

1、对象继承

util.inherits(son,//util.inherits(constructor,superconstructor);

测试结果

Son仅仅使用util中的函数就完成了从圆原型集成属性和方法。

2、将任意对象转换为字符串util.inspect()

结果为

3、其他

还有四个类型测试工具以及格式化和debug工具

util.isArray();判断是不是数组

util.isRegExp();判断正则

util.isDate();判断时间

util.isError();判断是否是错误

结果

util.format();

结果

三、事件处理

1、普通事件处理 绑定 移除等

events模块中的events.EventEmitter是时事件发射和事件监听器功能的封装。

带参数的事件。

结果

EventEmitter.once()只绑定执行一次,注册单次监听器,最多触发一次

结果

移除事件监听EventEmitter.removeListener(event,listener);移除指定事件的某个监听器

其中listener必须是该时间已经注册过的监听器

正常情况下这么写

结果是

如果加上移除事件监听的代码。

结果是

没有ok5事件执行的消息。说明注册的监听器已经成功移除了。

如果绑定了多个监听器想同时移除的话 使用

EventEmitter.removeAllListeners([event]);

结果

显示一个事件都没有执行,说明删除了所有的监听器。

2、error事件

Eventemitter定义了一个特殊事件 error

当error事件发射的时候,如果没有响应的监听器 node会把它当做一场,

退出程序并打印调用栈,一般要为会发射error事件的对象设置监听器,避免

遇到错误后整个程序崩溃掉。

结果

如果添加处理函数。

结果

大多数时候我们不会直接使用EventEmitter,而是在对象中继承它,包括fs、net、http在内的

只要是支持事件响应的核心模块都是EventEmitter的子类。

why?

首先,具有某个实体功能的对象实现事件符合语义,事件的监听和发射应该是一个对象的方法。

其次,Javascript的对象机制是基于原型的,支持部分多重继承,继承Eventemitter不会打乱

对象原有的继承关系。

四、文件系统fs(file system)

fs模块是文件操作的封装,它提供了文件的读取、写入、更名、删除、遍历目录、链接等POSIX

文件系统的操作。

不同之处:

fs模块中所有操作都是提供了异步和同步的两个版本,例如读取文件内容的函数有异步的

fs.readFile()h和同步的fs.readFileSync()。

1、异步读取文件 fs.readFile(文件名,编码,回调函数(error,data))

最简单的读取文件的函数。

文件名:必填

编码:表示文件的字符编码,指定了解析后是字符串,否则将会以Buffer形式表示二进制数据

回调函数:error表示有没有错误发生,data是读取到的文件内容

结果是

2、同步读取文件:

结果

同步读文件如果出现异常需要try catch捕获异常

结果

3、文件打开fs.open(文件名,打开模式,权限,回调)

fs.open(path, flags, [mode], [callback(err, fd)])是 POSIX open 函数的

封装,与 C 语言标准库中的 fopen 函数类似。它接受两个必选参数,path 为文件的路径,

flags 可以是以下值。 

 r :以读取模式打开文件。 

 r+ :以读写模式打开文件。 

 w :以写入模式打开文件,如果文件不存在则创建。 

 w+ :以读写模式打开文件,如果文件不存在则创建。 

 a :以追加模式打开文件,如果文件不存在则创建。 

 a+ :以读取追加模式打开文件,如果文件不存在则创建。 

mode 参数用于创建文件时给文件指定权限,默认是 0666

①。回调函数将会传递一个文

件描述符 fd

4、文件读取

fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead, 

buffer)])是 POSIX read 函数的封装, 相比 fs.readFile 提供了更底层的接口。 fs.read 

的功能是从指定的文件描述符 fd 中读取数据并写入 buffer 指向的缓冲区对象。 offset 是 

buffer 的写入偏移量。length 是要从文件中读取的字节数。position 是文件读取的起始

位置,如果 position 的值为 null,则会从当前文件指针的位置读取。回调函数传递 

bytesRead 和 buffer,分别表示读取的字节数和缓冲区对象。

以下是一个使用 fs.open 和 fs.read 的示例。 

var fs = require('fs'); 

 

fs.open('content.txt', 'r', function(err, fd) { 

  if (err) { 

    console.error(err); 

    return; 

  } 

   

  var buf = new Buffer(8); 

  fs.read(fd, buf, 0, 8, null, function(err, bytesRead, buffer) { 

    if (err) { 

      console.error(err); 

      return; 

    } 

     

    console.log('bytesRead: ' + bytesRead); 

    console.log(buffer); 

  }) 

}); 

运行结果则是: 

bytesRead: 8 

<Buffer 54 65 78 74 20 e6 96 87> 

一般来说,除非必要,否则不要使用这种方式读取文件,因为它要求你手动管理缓冲区

和文件指针,尤其是在你不知道文件大小的时候,这将会是一件很麻烦的事情。 

5、http服务器

http.createServer 创建了一个 http.Server 的实例,将一个函数

作为 HTTP 请求处理函数。这个函数接受两个参数,分别是请求对象( req )和响应对象

( res ) 。在函数体内,res 显式地写回了响应代码 200 (表示请求成功) ,指定响应头为 

'Content-Type': 'text/html',然后写入响应体 '<h1>Node.js</h1>',通过 res.end 

结束并发送。最后该实例还调用了 listen 函数,启动服务器并监听 3000 端口

GET POST

本文转载自:http://my.oschina.net/imhoodoo/blog/361937

共有 人打赏支持
a
粉丝 2
博文 120
码字总数 2912
作品 0
东城
一点感悟:《Node.js学习笔记》star数突破1000+

写作背景 笔者前年开始撰写的《Node.js学习笔记》 github star 数突破了1000,算是个里程碑吧。 从第一次提交(2016.11.03)到现在,1年半过去了。突然有些感慨,想要写点东西,谈谈这期间的...

程序猿小卡_casper
06/06
0
0
NODE高级编程阅读笔记系列(一)

本篇涉及以下主题 node简单介绍 事件驱动编程 模块化 缓冲区处理 Node简单介绍 直接用官方的那句话: Node.js 是一种建立在Google Chrome's V8 引擎上的non-blocking(非阻塞),event-driven(...

可爱的圣诞老人
05/23
0
0
细谈Node.js----我的笔记

学习心得 如何利用Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的 Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。N...

crossmix
2016/01/04
221
0
《Node.js开发指南》书评汇总

刚查了下库存,发现订阅《Node.js开发指南》的读者大增,这是为什么呢?看了下近期本书在豆瓣的评论,口碑很好,现将豆瓣的书评汇总如下: ----------------------------------------------...

生气的散人
2012/10/15
0
0
Node.js到底强在哪里?

PHP VS NODE.JS: THE REAL STATISTICS一文用PHP和Node.js实现文件读写的案例展示两者性能对比, 两者相差14倍之多。究其原因还是Node.JS的异步IO。 I/O是Web应用典型的消耗瓶颈,当一个请求达...

大糊涂
2015/06/20
0
0
深入浅出Node.js(一):什么是Node.js

专栏的第一篇文章《什么是Node.js》尝试从各个角度来阐述Node.js的基本概念、发展历史、优势等,对该领域不熟悉的开发人员可以通过本文了解Node.js的一些基础知识。 从名字说起 有关Node.js...

leeldy
2012/10/25
0
1
Nest.js 5 正式版:基于 TypeScript 的 Node.js 微服务框架

Nest.js 5 正式版发布了,Nest.js 是基于 TypeScript 面向切面编程的 Node.js 微服务框架,主要改进内容包括: 功能特性 core:支持异步生命周期钩子(OnModuleInit和OnModuleDestroy)#569...

左华栋
05/15
0
14
moro:一个用于追踪工作时间的命令行生产力工具

保持对你的工作小时数的追踪将让你知晓在一个特定时间区间内你所完成的工作总量。在网络上有大量的基于 GUI 的生产力工具可以用来追踪工作小时数。但我却不能找到一个基于 CLI 的工具。今天我...

作者: Sk
05/07
0
0
Node.js---01、初识NodeJS和Node.js的HTTP服务器搭建

一、前言 我们先从以下几个方面在大体上认识一下Node.js: Node.js 是什么?==> 运行环境 是一个 可以运行 并加载 ES语法的 脚本运行环境 JS(ES5)、ES6、Common.js 语法 …… Node.js 可以加...

秋季长青
2017/11/06
0
0
Nodejs学习路线图

Node.js的介绍 Node.js的是建立在Chrome的JavaScript的运行时,可方便地构建快速,可扩展的网络应用程序的平台。Node.js使用事件驱动,非阻塞I/O模型,轻量、高效,可以完美地处理时时数据,...

数通畅联
2016/01/26
212
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JupyterLab安装地图插件

JupyterLab安装地图插件 (本文所述软件还在发展之中,欢迎加入开源项目,提供建议、测试和开发。) 在Jupyter中进行数据分析时,往往需要将数据叠加到地图上。简单的可以利用matplotlib/ec...

openthings
3分钟前
0
0
Coding and Paper Letter(八)

资源整理 1 Coding: 1.Python项目,由Allen Downey撰写的Think Python第二版的LaTeX源代码和支持代码。 ThinkPython2 2.R语言包h3jsr,h3jsr使用V8的神奇力量通过其javascript绑定提供对Ube...

胖胖雕
12分钟前
0
0
skiplist跳跃表

插入删除log(N) TODO

梦想游戏人
13分钟前
1
0
利用世界杯,读懂 Python 装饰器

Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更加宽广,程序也更加 pythonic。 今天就结合最近的世界杯带大家理解下装饰器。...

p柯西
26分钟前
0
0
Xshell登录阿里云服务器ECS

Xshell登录阿里云服务器ECS 1. 参考资料: 1). 《阿里云服务器怎么用?阿里云服务器使用教程》 链接:http://www.cr173.com/html/50758_1.html 2). eagle-zhang的CSDN博客《Xshell连接不上阿...

SuShine
36分钟前
1
0
IDEA中的HTTP Client Editor测试API

在前后端分离项目,前后端通过api进行通信。如果用postman免费版进行api测试的话,由于无法保存测试脚本到文件,不方便前端查看。 你可以选择付费版。也可以利用IDEA自带的HTTP Client Edito...

hutaishi
38分钟前
0
0
解决“只能通过Chrome网上应用商店安装该程序”的方法

摘要 : 最近有些用户反映某个Chrome插件在安装的时候,提示“只能通过Chrome网上应用商店安装该程序”,为了解决这一问题,Chrome插件网带来了相关的解决方法。 某些用户在Chrome插件网下载了...

沧海一刀
39分钟前
0
0
通过UNIX域套接字传递文件描述符

  传送文件描述符是高并发网络服务编程的一种常见实现方式。Nebula 高性能通用网络框架即采用了UNIX域套接字传递文件描述符设计和实现。本文详细说明一下传送文件描述符的应用。 1. TCP服务...

Bwar
43分钟前
0
0
python操作Excle

# -*- coding: utf-8 -*-from openpyxl import load_workbook, Workbook#index:第几个sheet页,第一个sheet页的index为0def readExcle(filename,index): # 加载excle文件 wb = l......

淺陌离殇
44分钟前
0
0
Apache爆日志文件漏洞

全球使用最广泛的Web服务器Apache近日被爆出了一个安全漏洞,该漏洞可能导致攻击者控制服务器。 该漏洞包含在mod_rewrite 模块中的do_rewritelog()日志函数中。由于该函数还无法完全过滤写入...

问题终结者
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部