0%

Node.js基础知识

控制台

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
    9
    module.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
    4
    console.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
    15
    var 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
    2
    emmitter.on(event, listener)
    emmitter.addListener(event, listener)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var 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
    2
    setBreakpoint(filename, line)
    sb(filename, line)

    如果省略第一个参数则默认是当前文件,省略连个参数时把断点设置在调试器中下一句执行的代码处

  • 设置断点后使用c命令可以让代码一直运行到断点处
  • clearBreakpoint用于取消断点

其他命令

  • bt在深层函数内部调试时,查看该函数及其外层函数的返回位置
  • list查看当前要执行代码之前及之后的几行代码
    1
    list(n)//n代表行数
  • repl可以进入repl环境
  • restart可以重新开始脚本调试
  • kill终止调试
  • run使用kill后可以使用run重新开始
  • scripts查看当前正在运行的文件及所有被加载的模块文件名称
  • version显示V8引擎的版本号

使用node-inspector调试工具