控制台
console.log
console.log
用于进行标准输出流的输出- 可以重定向输出到文件中
1
2// app.js中是console.log('test')
node app.js 1>app.log这样可以将test输出到app.log文件中,1代表重定向标准输出流
- 可以通过传参指定输出格式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 从 第二个 参数 开始, 依序 输出 所有 字符串
console. log("% s", "hoge", "foo");
// 输出 结果 为 hoge foo
//将对 象 转换 为 字符串 后 输出
console. log("% s", "hoge", {foo:" FOO"});
// 输出 结果 为 hoge ({foo:" FOO"})
// 将 数值 转换 为 字符串 后 输出, 从 第二个 参数 开始, 依序 输出 所有 数值
console. log("% d", 10, 10. 5);
// 输出 结果 为 10 10. 5
// 将 字符串 作为 数值 进行 转换, 将 输出
NaN console. log("% d", "hoge");
// 输出 NaN
// 输出 百分 号
console. log("%%", "hoge");
// 输出% hoge console.info
与它相同
console.error
- 用于进行标准错误输出流的输出
- 同样可以输出到log文件中
1
node app.js 2>error.log
2代表重定向标准错误输出流
- 任何运行错误的信息均可被重定向,比如运行一个不存在的文件
1
node script.js 2>error.log
内容如下
1
2
3
4
5
6
7
8
9module.js:557
throw err;
^
Error: Cannot find module '/Users/finup/code/node学习/#3/script.js'
at Function.Module._resolveFilename (module.js:555:15)
at Function.Module._load (module.js:482:25)
at Function.Module.runMain (module.js:701:10)
at startup (bootstrap_node.js:194:16)
at bootstrap_node.js:618:3 - 也向
console.log
一样指定格式 console.warn
方法与之相同
console.dir
- 查看对象的内容并输出到控制台
console.time&console.timeEnd
console.time
记录标记代码执行开始时间,console.timeEnd
用来标记结束时间,两个方法做差计算出代码执行时间1
2
3
4console.time('small loop')
for(var i = 0; i < 100000; i++) {
}
console.timeEnd('small loop')// small loop: 2.286ms
console.trace
- console.trace将当前位置处栈信息作为标准错误信息输出,接受参数用于表示错误信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15var user = new Object()
user.name = ' Lulingniu'
user.getName = function() { return this.name}
user.setName = function(name) { this.name = name}
console.trace(' trace')
//Trace: trace
//at Object.<anonymous> (/Users/finup/code/node学习/#3/app.js:1:221)
//at Module._compile (module.js:660:30)
//at Object.Module._extensions..js (module.js:671:10)
//at Module.load (module.js:573:32)
//at tryModuleLoad (module.js:513:12)
//at Function.Module._load (module.js:505:3)
//at Function.Module.runMain (module.js:701:10)
//at startup (bootstrap_node.js:194:16)
//at bootstrap_node.js:618:3
console.assert
- 对表达式结果进行评估,如果结果为false,抛出AssertionError异常
全局作用于及全局函数
- node.js中存在全局作用域,可以定义不需要通过模块加载就能使用的变量
unref&ref
- 存在于定时器对象中,用于取消回调和恢复回调
- unref取消定时器回调
- ref恢复回调,在执行后经过定时器设置时间回调
require
- node.js中定义了
require.main
变量,用于检测一个模块是否为应用程序的主模块(在命令行窗口直接运行的程序) - 在加载文件模块时会运行模块文件中的每一行代码,模块首次加载后将缓存在内存缓存区中,这意味着多次引用模块不会导致模块的多次执行
- 可以使用
require.resolve
查询模块文件的带有完整绝对路径的文件名,查询时并不会加载该模块 - require.cache对象,代表模块加载的缓存区
- 可以使用
delete
删除缓存1
delete require.cache[require.resolve('./testModule.js')
- 可以使用
__filename & __dirname
- __fliename用于获取当前模块带有完整绝对路径的文件名,__dirname用于获取当前目录名
事件处理机制及时间环机制
绑定事件处理
- 使用
on
方法和addListener
方法1
2emmitter.on(event, listener)
emmitter.addListener(event, listener)1
2
3
4
5
6
7
8
9
10var http = require('http')
var server = http.createServer() // 创建 http 服务器 并将 该 服务器 赋值 给 变量 server
// 为 server 服务器 在 接收 到 客户 端 请求 时 触发 的 request 事件 绑 定 事件 处理 函数
server.on('request', function(req, res) {
if(req.url !== '/favicon.ico'){
console.log(req.url)
}
res.end()
})
server.listen(1337) - 可以给同一个事件绑定多个函数,默认最多10个,可以通过
setMaxListeners
方法修改这个数值1
emitter.setMaxListeners(n)
listeners
方法可以取得一个事件的所有处理函数once
方法可以让处理函数执行一次后立即被解除removeListener
取消事件处理函数,接收一个参数为要取消的处理函数名removeAllListeners
可以取消所有事件的处理函数,接收一个参数为要取消的事件名,可取消一个事件的所有处理函数
Node.js中的调试器
node debug
启动命令调试器1
node debug <脚本名>
- 输入命令
c
继续执行剩余代码,输入n
将程序执行到下一句可执行代码之前 n
命令以一句可执行代码为一个单位,因此执行var i=foo()
时不会进入函数内部,如果想进入内部使用s
,在函数内部使用o
可以执行完函数内剩余代码watch
命令可以观察某个变量或某个表达式的执行结果1
watch('观察的表达式')
unwatch
可以解除观察
设置与取消断点
- 使用
sb
命令1
2setBreakpoint(filename, line)
sb(filename, line)如果省略第一个参数则默认是当前文件,省略连个参数时把断点设置在调试器中下一句执行的代码处
- 设置断点后使用
c
命令可以让代码一直运行到断点处 clearBreakpoint
用于取消断点
其他命令
bt
在深层函数内部调试时,查看该函数及其外层函数的返回位置list
查看当前要执行代码之前及之后的几行代码1
list(n)//n代表行数
repl
可以进入repl环境restart
可以重新开始脚本调试kill
终止调试run
使用kill
后可以使用run
重新开始scripts
查看当前正在运行的文件及所有被加载的模块文件名称version
显示V8引擎的版本号