3.1 Node.js中的控制台
(1) console.log() === console.info()
(2) console.error() === console.warn
(3) console.dir() 查看 对象内容 并将其输出到控制台中
var userObj = {
name: 'gem',
age: 18
}
console.dir(userObj)
image.png
(4) console.time(label) 方法与 console.timeEnd(label) 方法
用于计算一段代码的执行时间
console.time('small loop')
for (var i = 0; i < 10000; i++) {
;
}
console.timeEnd('small loop')
(5) console.trace (label)
将当前位置处的栈信息作为标准错误信息进行输出
(6) console.assert
用于对一个表达式的执行结果进行评估,若为false,则输出一个消息字符串并抛出AssertionError异常
console.assert(1==2, 'raise an exception')
3.3 Node.js中的全局作用域
在Node.js中,在一个模块中定义的变量、函数或方法只在该模块中可用,但可以通过exports对象的使用将其传递到模块外部。
但,Node.js仍然存在一个全局作用域(定义了一个global对象,代表Node.js中的全局命名空间,任何全局变量、函数或对象都是该对象的一个属性)
console.log(global)
(1) 全局函数
- setTimeout 与 clearTimeout 函数
- setInterval 与 clearInterval 函数
(2) 与模块相关的全局函数与对象
- 使用require 函数加载模块
var foo = require('../foo.js')
- 应用程序的主模块:
在node.js中,由于所有脚本都是一个模块文件,因此chapter-3.js脚本文件本身也是一个模块文件,又直接在命令窗口中通过'node'命令被直接运行,所以被称为应用程序的主模块。
require.main 用于检测一个模块是否为应用程序中的主模块
if (module === require.main) {
console.log('this is the main module of application')
}
- 在加载模块文件时,将运行模块文件的每一行代码;而且 模块在首次加载后将缓存在内存缓存区中
例子1:
var textVar = 'this is a variable from testModule.js';
console.log(textVar);
exports.textVar = textVar;
var testModule = require('./chapter-3-testModule.js')
var testModule = require('./chapter-3-testModule.js')
var testModule = require('./chapter-3-testModule.js')
// 同样只打印一次内容
例子2:
var textVar = 'this is a variable from testModule.js';
var outputTestVar = function () {
console.log(textVar);
}
exports.outputTestVar = outputTestVar;
exports.textVar = textVar;
var testModule1 = require('./chapter-3-testModule.js')
var testModule2 = require('./chapter-3-testModule.js')
testModule1.outputTestVar()
testModule2.outputTestVar()
image.png
(3) 使用require.resolve函数查询完整模块名
image.png(4) require.cache对象
该对象代表缓存了所有已被加载模块的缓存区
image.png
var testModule1 = require('./chapter-3-testModule.js')
var testModule2 = require('./chapter-3-testModule.js')
// 通过键名来访问某一个模块 require.cache["模块文件名"],以下为删除缓存
delete require.cache[require.resolve('./chapter-3-testModule.js')]
var testModule3 = require('./chapter-3-testModule.js')
(5)__filename 变量和__dirname变量
- __filename :获取当前模块文件的带有绝对完整路径的文件名
console.log(__filename)
var testModule = require('./chapter-3-test/test.js')
image.png
- __dirname : 获取当前模块文件所在目录的完整绝对路径
console.log(__dirname)
image.png
3.4 事件处理机制及事件环机制
(1) EventEmitter类的各个方法
- on/addListener
// emitter 均代表继承了EventEmitter类的子类实例对象
emitter.on(event, listener)
emitter.addListener(event, listener)
var http = require('http')
var server = http.createServer()
server.on('request', function(req, res) {
console.log(req.url)
res.end()
})
server.listen(1337, '127.0.0.1')
server.removeAllListeners('request')
- 用EventEmitter类的emit方法,手工触发某一个对象的一个事件
emitter.emit(event, [arg1], [arg2], [...])
var http = require('http')
var server = http.createServer()
server.on('customEvent-gem', function(arg1, arg2, arg3){
console.log('自定义事件被触发')
console.log(arg1, arg2)
})
server.emit('customEvent-gem', '自定义参数1', '自定义参数2') // 手动触发事件
server.listen(1337, '127.0.0.1')
image.png
- 获取指定事件的 事件处理函数的数量
var http = require('http')
var events = require('events')
var server = http.createServer()
server.on('request', function(req, res) {
console.log('收到客户端请求')
})
server.on('request', function(req, res) {
console.log(req.url)
res.end()
})
server.on('request', function(req, res) {
console.log('发送响应完毕')
})
server.listen(1337, '127.0.0.1')
console.log(events.EventEmitter.listenerCount(server, 'request'))
image.png
- events 模块中,为EventEmitter类本身定义的两个事件: newListerner事件与removeListener事件
(1) 当对继承了EventEmitter类的子类实例对象 绑定事件处理函数时,会触发newListerner事件
(2) 当对继承了EventEmitter类的子类实例对象 取消事件处理函数时,会触发removeListener
var http = require('http')
var server = http.createServer()
server.on('removeListener', function(e, f) {
console.log("对"+e+"事件取消事件处理函数")
console.log(f)
})
server.on('newListener', function(e, f) {
console.log("对"+e+"事件添加事件处理函数")
console.log(f)
})
var testFunction = function(req, res) {
if (req.url !== "/favicon.ico") {
console.log('发送响应完毕')
}
}
server.on('request', function(req, res) {
if (req.url !== "/favicon.ico") {
console.log('接收到客户端请求')
}
res.end()
})
server.on('request', function(req, res) {
if (req.url !== "/favicon.ico") {
console.log('req.url')
}
res.end()
})
server.on('request', testFunction)
server.removeListener('request', testFunction)
server.listen(1337, "127.0.0.1")
image.png
网友评论