赞
踩
问题1:process.exit事件
(3)当进程准备退出的时候触发。在这时候没有任何方法能够阻止事件循环的退出,当所有的exit事件处理程序执行完毕之后就会退出。因此,在这时候你必须执行一些同步的请求,而不能是异步的。因此最好检查一下模块此时的状态,如通过unit检测。回调函数只有一个参数,也就是当前进程正在退出的程序代码块
问题2:beforeExit事件
当Node.js清空了他的事件循环,并且没有任何逻辑去处理的时候会触发。通常node.js当没有任何工作进程的时候会退出,但是beforeExit可以产生异步的调用,从而让node.js继续执行
beforeExit在以下情况下不会调用如process.exit或者触发了未捕获的异常的时候。这个事件不能作为exit的替代方案,除非是为了继续执行后续的程序
问题3:uncaught exception事件
(1)默认情况下,node.js处理这种异常的方式是通过把消息栈打印到错误流中,然后退出。通过添加这个事件可以替换这种默认的行为
(2)uncaughtException是一种粗糙的异常处理手段,一般情况下最好不要用。
(3)在事件处理中抛出的异常不会被捕获到,这时候程序会抛出一个非0的数字,同时会打印输出流。这是为了防止循环调用的产生
问题4:unhandledRejection事件
结果打印:Unhandled Rejection at: Promise { state: 'rejected', reason: '你没有权限' } reason:你没有权限
(1)unhandledRejection当promise对象被拒绝,同时没有设置异常处理的回调函数时候触发。这个事件可以跟踪那些Promise被拒绝了,同时还没有设置异常处理函数。问题5:SIGN Event事件
(1)这是事件当接收到SIGN事件的时候会触发,通常是通过Ctrl+c来触发,其它内容参见官方API
问题6:process.arch获取处理器架构
结果为:
关闭到父进程的IPC通道,如果没有任何进程保持子进程的存活,那么可以让子进程关闭。如果node.js没有IPC通道,那么这时候process.disconnect()将会是undefined
问题12:process.env
(1) 返回用户的环境,包括系统所有的信息,甚至连我系统的tomcat都打印出来了
(2)你可以修改这个对象,但是这个属性不会反映到当前的进程外面去,也就是下面的代码不会其作用
与 process.argv 类似,不过是用于保存 node特殊(node-specific) 的命令行选项(参数)。这些特殊的选项不会出现在 process.argv 中,而且 process.execArgv 不会保存 process.argv 中保存的参数(如 0:node 1:文件名 2.3.4.参数 等), 所有文件名之后的参数都会被忽视。这些选项可以用于派生与与父进程相同执行环境的子进程。
在Git bash中输入:node --harmony execArgv.js --version
在execArgv.js中输入:
退出当前进程,如果没有设置code,那么code默认为0表示成功退出
问题16:process.exitCode
如果进程正常退出,或者调用process.exit没有指定参数那么其值为0,否则就是非0。如果有process.exit传入了code,那么任何前面通过process.exitCode设置的值都是无效
也可以参考中文API,之所以写这篇博客还是为了好好认识一些这个process模块!
问题17:process.hrtime
(1)返回当前进程的高分辨时间,形式为 [seconds, nanoseconds]数组。它是相对于过去的任意时间。该值与日期无关,因此不受时钟漂移的影响。主要用途是可以通过精确的时间间隔,来衡量程序的性能。你可以将之前的结果传递给当前的 process.hrtime() ,会返回两者间的时间差,用来基准和测量时间间隔。
(2)diff[0]表示的是秒,第二个参数表示的纳秒
(1)发送信号给进程. pid 是进程id,并且 signal 是发送的信号的字符串描述。信号名是字符串,比如 'SIGINT' 或 'SIGHUP'。
如果忽略,信号会是 'SIGTERM'。如果进程没有退出,会抛出错误。信号 0 可以用来测试进程是否存在。
(2)注意,虽然这个这个函数名叫process.kill,它仅是信号发射器,就像kill 系统调用。信号发射可以做其他事情,不仅是杀死目标进程。
(3)windows将会抛出错误,如果这个process.pid用于杀死进程组.
(4)如果目标进程不存在,将会抛出错误。特殊情况下可以发送一个0去检测进程是否存在!
问题18:process.mainModule
(1)该方法是require.main 的备选方法。不同点,如果主模块在运行时改变,require.main可能会继续返回老的模块。可以认为,这两者引用了同一个模块。和 require.main 一样, 如果没有入口脚本,将会返回undefined 。
问题19:process.memoryUsage方法
(1)返回node.js进程内存的使用情况,单位为bytes。rss(resident set size)表示进程的常驻内存部分,进程的内存总共分为几个部分,一部分是rss,其余在交换区或者文件系统中。
(2)heapTotal和heapUsed描述内存的使用情况。两者都反映的是V8堆内存的信息,heapTotal是堆中总共申请的内存的存量,heapUsed表示堆内存中使用的内存量。
打印如下结果:
(1)一旦当前事件循环结束,调用回调函数。这不是 setTimeout(fn, 0) 的简单别名,这个效率更高。它在任何额外的I/O事件之前触发,包括定时器。
(2)当前事件循环结束那么就会触发回调函数。每次调用nextTick只是将回调函数放入队列中,当下一轮Tick时取出执行,定时器采用红黑树的事件复杂度为O(lg(n))而nextTick时间复杂度为O(1)
在对象构造后,在 I/O 事件发生前,你又想改变附加事件处理函数时,这个非常有用。
process.stderr 和 process.stdout 和 node 里的其他流不同,他们不会被关闭(end() 将会被抛出),它们不会触发 finish 事件,并且写是阻塞的。
问题24:process.stdin
(1)process.stdin 可以工作在老模式里,和 v0.10 之前版本的 node 代码兼容。
(2)在老的流模式里,stdin流默认暂停,必须调用 process.stdin.resume() 读取。可以调用 process.stdin.resume() 切换到老的模式。
如果开始一个新的工程,最好选择新的流,而不是用老的流。
问题25:process.umask([mask])
设置或读取进程文件的掩码。子进程从父进程继承掩码。如果mask 参数有效,返回旧的掩码。否则,返回当前掩码
问题26:process.version,process.versions等
很多内容可以继续阅读极客学院的API
下面是FileSystem模块相关知识:
问题1:fs.watch方法的使用
(1)persistent参数和watch函数是一样的,但是option还是可以指定一个interval参数,表示每隔多久对这个文件进行轮询,查看其是否修改了
(2)回调函数有两个参数,第一个是当前的对象,第二个是上一个对象,他们都是fs.Stat对象
(3)这个方法相对于watch来说有以下特点:他是通过轮询的方式监听文件是否改变,同时他可以兼容不同的平台
(4)watch事件比watchFile和unwatchFile更加高效。建议用watch替换其它两者
(5)每次存取文件的时候都会触发watchFile,但是只有修改了文件才会触发watch!
问题3:fs.access(path[, mode], callback)
(1)检测用户对于一个文件的存取权限,mode是一个可选的整数,表示存取的权限。取值可能如下:
fs.F_OK:文件对于当前进程是可见的,用于判断一个文件是否存在,但是对于rwx权限没有任何反应。这是默认的模式
fs.R_OK:文件对于当前进程是可见的,用于判断一个文件是否存在,但是对于rwx权限没有任何反应。这是默认的模式
fs.W_OK:文件对于当前进程可写
fs.X_OK:文件可以执行,在window上相当于fs.F_OK
(2)回调函数表示只要有一个权限没有就报错,并把error给函数的参数
关于文件存取权限的内容可以参看:linux umask命令-预设文件权限掩码
问题4:fs.createWriteStream(path[, options])
下面是一个默认的options对象:
(1)返回值是一个新的ReadStream对象,而且和highWaterMark不同的是,相同的参数下,这个方法的默认返回的流大小是64Kb,而不是16kb
(2)options中可以传入一个end和start用于读取一部分的数据而不是所有的数据,而且start和end也包含在读取的数据之中。encoding参数可以Buffer接受的任何编码
(3)如果指定了fd,那么ReadStream会忽略path,就是默认只用这个文件描述符。这时候没有任何open方法触发,同时fd是阻塞的,非阻塞的文件描述符应该传递给net.Socket
(4)如果指定了autoClose为false,那么文件描述符不会自动关闭,即使抛出了异常。因此你应该手动关闭它,确保没有文件描述符泄漏。如果设置为true,在onerror或者onend中文件描述符会自动关闭
(5)mode指定了文件的模式(权限或者粘接位),但是只有文件被创建的时候
(6)如果options是string,那么就是指定编码
问题5:fs.appendFile(file, data[, options], callback)
(1)第三个参数是options,其中encoding指定编码,mode指定文件的读写方式默认是0o666,flag默认是'a'表示append
(2)如果文件不存在那么就创建,data可以是Buffer或者string
(3)如果option是string那么就是指定encoding。file可以是文件名或者文件描述符
(4)任何指定的文件描述符都会被打开,然后追加数据(指定的文件描述符不会被自动关闭)
问题6:fs.stat(path, callback)
其中callback中第二个参数就是fs.Stats对象,该对象有以下属性:
属性说明如下表:
数字下标
|
关联键名(自 PHP 4.0.6)
|
说明
|
0
|
dev
|
设备名
|
1
|
ino
|
号码
|
2
|
mode
|
inode 保护模式
|
3
|
nlink
|
被连接数目
|
4
|
uid
|
所有者的用户 id
|
5
|
gid
|
所有者的组 id
|
6
|
rdev
|
设备类型,如果是 inode 设备的话
|
7
|
size
|
文件大小的字节数
|
8
|
atime
|
上次访问时间(Unix 时间戳)
|
9
|
mtime
|
上次修改时间(Unix 时间戳)
|
10
|
ctime
|
上次改变时间(Unix 时间戳)
|
11
|
blksize
|
文件系统 IO 的块大小
|
12
|
blocks
|
所占据块的数目
|
用法如下:
(1)其中stats是一个fs.Stats参数,参见官网。其中atime(access time)表示最近存取文件的时间;mtime表示最近一次修改文件数据的时间;ctime表示最近一次修改文件状态的时间;birthtime表示创建文件的时间。关于文件的属性可以参考Linux的inode的理解和 atime、mtime、ctime IO系统性能之一:衡量性能的几个指标 UNIX内核(11):FS系统调用——link()和unlink()
问题7:fs.chmod(path, mode, callback)
问题7:fs.chown(path, uid, gid, callback)
(1)path目录路径;uid 用户ID;gid群体身份 (指共享资源系统使用者的身份);callback回调 ,传递异常参数 err。而且uid和gid都是整数值
问题8:fs.fchown(fd, uid, gid, callback)
下面是HTTP模块的相关知识理解:
第一部分:Class: http.ServerResponse对象的一些方法
问题1:response.addTrailers方法
问题2:response.end([data][, encoding][, callback])
这个方法告诉服务器,所有的响应头和响应体已经发送;服务器可以认为消息结束。response.end() 方法必须在每个响应中调用。 如果指定了data那么相当于同时调用了response.write(data, encoding)和response.end(callback);如果指定了callback那么会在响应流结束后调用回调
注意:setHeader中的头会和writeHead中的头合并,而且后者的优先级比前者高!
问题9:response.setTimeout
发送 HTTP/1.1 100 Continue 消息给客户端,表示请求体可以发送。发送大文件的时候可以用!
问题14:response.writeHead(statusCode[, statusMessage][, headers])
问题1:checkContinue事件:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。