[学习笔记]node学习笔记

278 阅读2分钟

global 全局变量

模块包装器

    (function(exports, require, module, __filename, __dirname) {
        // 模块的代码实际上在这里
    });
  • exports

    exports = global.exports = {} (注意这是个对象,实际对外导出的是global.exports)

  • module

    module = global.module = {} (注意这是个对象,实际对外导出的是global.module)

  • require()

    引包

  • __filename

    当前模块的文件名称---解析后的绝对路径。 在主程序中这不一定要跟命令行中使用的名称一致。

  • __dirname

    当前模块的文件夹名称。等同于 __filename 的 path.dirname() 的值。

process 进程

常用属性

  • Events:uncaughtException

    process.on('uncaughtException', (err) => {
      fs.writeSync(1, `Caught exception: ${err}\n`);
    });
    
    setTimeout(() => {
      console.log('This will still run.');
    }, 500);
    
    // 故意调用一个不存在的函数,应用会抛出未捕获的异常
    nonexistentFunc();
    console.log('This will not run.');
    
  • argv

属性返回一个数组,这个数组包含了启动Node.js进程时的命令行参数。第一个元素为process.execPath。如果需要获取argv[0]的值请参见 process.argv0。第二个元素为当前执行的JavaScript文件路径。剩余的元素为其他命令行参数

```
例如,process-args.js文件有以下代码:
// print process.argv
process.argv.forEach((val, index) => {
  console.log(`${index}: ${val}`);
});
运行以下命令,启动进程:

$ node process-args.js one two=three four
将输出:

0: /usr/local/bin/node
1: /Users/mjr/work/node/process-args.js
2: one
3: two=three
4: four
```
  • argv0
  • execArgv
```
例如:

$ node --harmony script.js --version
process.execArgv的结果:

['--harmony']
process.argv的结果:

['/usr/local/bin/node', 'script.js', '--version']
```
  • execPath
  • env

一个包含用户环境信息的对象

  • cwd()

方法返回 Node.js 进程当前工作的目录

调试

inspect

// chrome打开 chrome://inspect/#devices

$ node --inspect process-args.js

// 进入程序开始时打断点
$ node --inspect-brk process-args.js

对比 setImmediate、setTimeout、process.nextTick

process.nextTick 插入到当前队列队尾,setImmediate 插入到下个队列队首

例如:
setImmediate(() => console.log('setImmediate'))

setTimeout(() => console.log('setTimeout'), 0)

process.nextTick(() => console.log('nextTick'))

输出:
nextTick
setTimeout
setImmediate

模块

path (路径)

  • normalize()

格式化路径

  • join()

拼接路径,内部会调用normalize

  • resolve()

获取一个目标文件的绝对路径

  • basename()

获取文件名(路径),不同操作系统获取的不一样

  • dirname()

获取所在文件夹路径

  • extname()

获取文件的拓展名

  • parse

解析一个路径,并返回一个包含这个路径信息的对象

  • format

把parse()返回的对象重新组合成字符串并返回这个字符串

  • sep
  • delimiter
  • win32
  • posix

Buffer (缓冲)

  • alloc()
// 创建一个长度为 10、且用 0 填充的 Buffer。
const buf1 = Buffer.alloc(10);

// 创建一个长度为 10、且用 0x1 填充的 Buffer。 
const buf2 = Buffer.alloc(10, 1);
  • allocUnsafe()
// 创建一个长度为 10、且未初始化的 Buffer。
// 这个方法比调用 Buffer.alloc() 更快,
// 但返回的 Buffer 实例可能包含旧数据,
// 因此需要使用 fill() 或 write() 重写。
const buf3 = Buffer.allocUnsafe(10);
  • from()
// 创建一个包含 [0x1, 0x2, 0x3] 的 Buffer。
const buf4 = Buffer.from([1, 2, 3]);

// 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
const buf5 = Buffer.from('tést');

// 创建一个包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer。
const buf6 = Buffer.from('tést', 'latin1');
  • byteLength()
// 字符串的编码长度
Buffer.byteLength('test')
  • isBuffer()

  • concat(list[, totalLength])

  • 5

Buffer 实例方法

  • buf.length
  • buf.toString()
  • buf.fill() 修改buf内容
  • buf.equals()
  • buf.indexOf()
  • buf.copy() 复制buf内容

events (事件)

// 例子
const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
  console.log('触发了一个事件!');
});
myEmitter.emit('event');
  • emitter.on(eventName, listener)
  • emitter.once(eventName, listener)
  • emitter.addListener(eventName, listener)
  • emitter.emit(eventName[, ...args])
  • emitter.eventNames()
  • 错误处理
  • 'newListener' 事件

fs (文件系统)

  • fs.readFile(path[, options], callback) // 读取文件
  • fs.writeFile(file, data[, options], callback) // 写文件
  • fs.stat(path, callback) // 查看文件、文件夹信息
    • stats.isFile() // 是不是文件
    • stats.isDirectory() // 是不是文件夹
  • fs.rename(oldPath, newPath, callback) // 重命名
  • fs.unlink(path, callback) // 删除文件
  • fs.readdir(path[, options], callback) // 查看文件夹
  • fs.mkdir(path[, mode], callback) // 创建文件夹
  • fs.rmdir(path, callback) // 删除文件夹
  • fs.watch(filename[, options][, listener]) // 监听文件、文件夹变化
  • fs.watchFile(filename[, options], listener) // 监听文件变化
  • fs.createReadStream(path[, options])
  • fs.createWriteStream(path[, options])