Top Banner
Node.js v0.10.26 Manual & Documentation PDF created by Mirco Zeiss - mircozeiss.com Content by node.js and its creators March 16, 2014
222
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • Node.js v0.10.26 Manual & Documentation

    PDF created by Mirco Zeiss - mircozeiss.comContent by node.js and its creators

    March 16, 2014

  • Abstract

    I sometimes prefer manuals on paper to online references. Taking notes and writing down little hints is mucheasier. Thats why I created this pdf version of the current node.js manual & documentation. However thinkabout nature and our environment before printing too many documents!

    All the content is taken from the node.js homepage / its github repository.

    I used pandoc to convert the .markdown files to .tex files. They were then converted into a .pdf file withpdfLaTeX.

    You can find the project on github.

  • CONTENTS

    ContentsAbout this Documentation 15

    Stability Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15JSON Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    Synopsis 16

    Assert 17assert.fail(actual, expected, message, operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17assert(value, message), assert.ok(value, [message]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17assert.equal(actual, expected, [message]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17assert.notEqual(actual, expected, [message]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17assert.deepEqual(actual, expected, [message]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17assert.notDeepEqual(actual, expected, [message]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17assert.strictEqual(actual, expected, [message]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17assert.notStrictEqual(actual, expected, [message]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17assert.throws(block, [error], [message]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17assert.doesNotThrow(block, [message]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18assert.ifError(value) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    Buffer 19Class: Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    new Buffer(size) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19new Buffer(array) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19new Buffer(str, [encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Class Method: Buffer.isEncoding(encoding) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Class Method: Buffer.isBuffer(obj) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20Class Method: Buffer.byteLength(string, [encoding]) . . . . . . . . . . . . . . . . . . . . . . . 20Class Method: Buffer.concat(list, [totalLength]) . . . . . . . . . . . . . . . . . . . . . . . . . . 20buf.length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20buf.write(string, [offset], [length], [encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . 20buf.toString([encoding], [start], [end]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21buf.toJSON() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21buf[index] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd]) . . . . . . . . . . . . . . . . . 22buf.slice([start], [end]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22buf.readUInt8(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22buf.readUInt16LE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23buf.readUInt16BE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23buf.readUInt32LE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23buf.readUInt32BE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23buf.readInt8(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24buf.readInt16LE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24buf.readInt16BE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24buf.readInt32LE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24buf.readInt32BE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24buf.readFloatLE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25buf.readFloatBE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25buf.readDoubleLE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25buf.readDoubleBE(offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25buf.writeUInt8(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25buf.writeUInt16LE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26buf.writeUInt16BE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26buf.writeUInt32LE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26buf.writeUInt32BE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26buf.writeInt8(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27buf.writeInt16LE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27buf.writeInt16BE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27buf.writeInt32LE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27buf.writeInt32BE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27buf.writeFloatLE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    1

  • CONTENTS

    buf.writeFloatBE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28buf.writeDoubleLE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28buf.writeDoubleBE(value, offset, [noAssert]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28buf.fill(value, [offset], [end]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28buf.toArrayBuffer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    buffer.INSPECT_MAX_BYTES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Class: SlowBuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    Addons 30Hello world . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Addon patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    Function arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Object factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33Function factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33Wrapping C++ objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Factory of wrapped objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Passing wrapped objects around . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    Child Process 41Class: ChildProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    Event: error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Event: exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Event: close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Event: disconnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Event: message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42child.stdin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42child.stdout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42child.stderr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42child.pid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42child.connected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42child.kill([signal]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43child.send(message, [sendHandle]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43child.disconnect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    child_process.spawn(command, [args], [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45child_process.exec(command, [options], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47child_process.execFile(file, [args], [options], [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . 48child_process.fork(modulePath, [args], [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48child_process.spawnSync(command, [args], [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . 49child_process.execFileSync(command, [args], [options]) . . . . . . . . . . . . . . . . . . . . . . . . . 49child_process.execSync(command, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    Cluster 51How It Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51cluster.schedulingPolicy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52cluster.settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52cluster.isMaster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52cluster.isWorker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Event: fork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53Event: online . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53Event: listening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53Event: disconnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53Event: exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Event: setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54cluster.setupMaster([settings]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54cluster.fork([env]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55cluster.disconnect([callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55cluster.worker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55cluster.workers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Class: Worker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    worker.id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56worker.process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    2

  • CONTENTS

    worker.suicide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56worker.send(message, [sendHandle]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56worker.kill([signal=SIGTERM]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57worker.disconnect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57Event: message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58Event: online . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58Event: listening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Event: disconnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Event: exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Event: error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    console 60console.log([data], [. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60console.info([data], [. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60console.error([data], [. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60console.warn([data], [. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60console.dir(obj) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60console.time(label) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60console.timeEnd(label) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60console.trace(label) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61console.assert(expression, [message]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

    Crypto 62crypto.setEngine(engine, [flags]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62crypto.getCiphers() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62crypto.getHashes() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62crypto.createCredentials(details) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62crypto.createHash(algorithm) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63Class: Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

    hash.update(data, [input_encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63hash.digest([encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

    crypto.createHmac(algorithm, key) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Class: Hmac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    hmac.update(data) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64hmac.digest([encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    crypto.createCipher(algorithm, password) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64crypto.createCipheriv(algorithm, key, iv) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Class: Cipher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    cipher.update(data, [input_encoding], [output_encoding]) . . . . . . . . . . . . . . . . . . . . 65cipher.final([output_encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65cipher.setAutoPadding(auto_padding=true) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65cipher.getAuthTag() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65cipher.setAAD(buffer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    crypto.createDecipher(algorithm, password) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65crypto.createDecipheriv(algorithm, key, iv) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65Class: Decipher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    decipher.update(data, [input_encoding], [output_encoding]) . . . . . . . . . . . . . . . . . . . 66decipher.final([output_encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66decipher.setAutoPadding(auto_padding=true) . . . . . . . . . . . . . . . . . . . . . . . . . . 66decipher.setAuthTag(buffer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66decipher.setAAD(buffer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

    crypto.createSign(algorithm) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Class: Sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

    sign.update(data) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66sign.sign(private_key, [output_format]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

    crypto.createVerify(algorithm) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Class: Verify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    verifier.update(data) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67verifier.verify(object, signature, [signature_format]) . . . . . . . . . . . . . . . . . . . . . . . . 67

    crypto.createDiffieHellman(prime_length, [generator]) . . . . . . . . . . . . . . . . . . . . . . . . . 67crypto.createDiffieHellman(prime, [prime_encoding], [generator], [generator_encoding]) . . . . . . 67Class: DiffieHellman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    3

  • CONTENTS

    diffieHellman.verifyError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68diffieHellman.generateKeys([encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68diffieHellman.computeSecret(other_public_key, [input_encoding], [output_encoding]) . . . . 68diffieHellman.getPrime([encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68diffieHellman.getGenerator([encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68diffieHellman.getPublicKey([encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68diffieHellman.getPrivateKey([encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68diffieHellman.setPublicKey(public_key, [encoding]) . . . . . . . . . . . . . . . . . . . . . . . . 68diffieHellman.setPrivateKey(private_key, [encoding]) . . . . . . . . . . . . . . . . . . . . . . . 68

    crypto.getDiffieHellman(group_name) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69crypto.pbkdf2(password, salt, iterations, keylen, [digest], callback) . . . . . . . . . . . . . . . . . . 69crypto.pbkdf2Sync(password, salt, iterations, keylen, [digest]) . . . . . . . . . . . . . . . . . . . . . 69crypto.randomBytes(size, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69crypto.pseudoRandomBytes(size, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Class: Certificate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    Certificate.verifySpkac(spkac) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Certificate.exportChallenge(spkac) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Certificate.exportPublicKey(spkac) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    crypto.DEFAULT_ENCODING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Recent API Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    Debugger 71Watchers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Commands reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

    Stepping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Breakpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Execution control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Various . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    Advanced Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    DNS 74dns.lookup(hostname, [family], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74dns.resolve(hostname, [rrtype], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74dns.resolve4(hostname, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75dns.resolve6(hostname, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75dns.resolveMx(hostname, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75dns.resolveTxt(hostname, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75dns.resolveSrv(hostname, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75dns.resolveSoa(hostname, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75dns.resolveNs(hostname, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75dns.resolveCname(hostname, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75dns.reverse(ip, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76dns.getServers() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76dns.setServers(servers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76Error codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

    Domain 77Warning: Dont Ignore Errors! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Additions to Error objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Implicit Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Explicit Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79domain.create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80Class: Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

    domain.run(fn) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80domain.members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81domain.add(emitter) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81domain.remove(emitter) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81domain.bind(callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81domain.intercept(callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82domain.enter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82domain.exit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

    4

  • CONTENTS

    domain.dispose() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

    Events 84Class: events.EventEmitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

    emitter.addListener(event, listener) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84emitter.on(event, listener) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84emitter.once(event, listener) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84emitter.removeListener(event, listener) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84emitter.removeAllListeners([event]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85emitter.setMaxListeners(n) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85EventEmitter.defaultMaxListeners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85emitter.listeners(event) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85emitter.emit(event, [arg1], [arg2], [. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Class Method: EventEmitter.listenerCount(emitter, event) . . . . . . . . . . . . . . . . . . . . 85Event: newListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Event: removeListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    File System 86fs.rename(oldPath, newPath, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87fs.renameSync(oldPath, newPath) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87fs.ftruncate(fd, len, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87fs.ftruncateSync(fd, len) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87fs.truncate(path, len, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87fs.truncateSync(path, len) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87fs.chown(path, uid, gid, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87fs.chownSync(path, uid, gid) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87fs.fchown(fd, uid, gid, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87fs.fchownSync(fd, uid, gid) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87fs.lchown(path, uid, gid, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87fs.lchownSync(path, uid, gid) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.chmod(path, mode, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.chmodSync(path, mode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.fchmod(fd, mode, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.fchmodSync(fd, mode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.lchmod(path, mode, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.lchmodSync(path, mode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.stat(path, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.lstat(path, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.fstat(fd, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.statSync(path) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.lstatSync(path) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88fs.fstatSync(fd) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89fs.link(srcpath, dstpath, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89fs.linkSync(srcpath, dstpath) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89fs.symlink(srcpath, dstpath, [type], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89fs.symlinkSync(srcpath, dstpath, [type]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89fs.readlink(path, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89fs.readlinkSync(path) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89fs.realpath(path, [cache], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89fs.realpathSync(path, [cache]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89fs.unlink(path, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89fs.unlinkSync(path) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90fs.rmdir(path, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90fs.rmdirSync(path) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90fs.mkdir(path, [mode], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90fs.mkdirSync(path, [mode]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90fs.readdir(path, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90fs.readdirSync(path) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90fs.close(fd, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90fs.closeSync(fd) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90fs.open(path, flags, [mode], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90fs.openSync(path, flags, [mode]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    5

  • CONTENTS

    fs.utimes(path, atime, mtime, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91fs.utimesSync(path, atime, mtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91fs.futimes(fd, atime, mtime, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91fs.futimesSync(fd, atime, mtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91fs.fsync(fd, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91fs.fsyncSync(fd) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91fs.write(fd, buffer, offset, length[, position], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . 91fs.write(fd, data[, position[, encoding]], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92fs.writeSync(fd, buffer, offset, length[, position]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92fs.writeSync(fd, data[, position[, encoding]]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92fs.read(fd, buffer, offset, length, position, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . 92fs.readSync(fd, buffer, offset, length, position) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92fs.readFile(filename, [options], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92fs.readFileSync(filename, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93fs.writeFile(filename, data, [options], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93fs.writeFileSync(filename, data, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93fs.appendFile(filename, data, [options], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93fs.appendFileSync(filename, data, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94fs.watchFile(filename, [options], listener) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94fs.unwatchFile(filename, [listener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94fs.watch(filename, [options], [listener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

    Caveats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94fs.exists(path, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95fs.existsSync(path) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95Class: fs.Stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

    Stat Time Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96fs.createReadStream(path, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Class: fs.ReadStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    Event: open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97fs.createWriteStream(path, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Class: fs.WriteStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    Event: open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97file.bytesWritten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    Class: fs.FSWatcher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97watcher.close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Event: change . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Event: error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    Global Objects 98global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98Class: Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98require() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

    require.resolve() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98require.cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98require.extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

    __filename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99__dirname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99exports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99setTimeout(cb, ms) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100clearTimeout(t) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100setInterval(cb, ms) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100clearInterval(t) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

    HTTP 101http.METHODS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101http.STATUS_CODES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101http.createServer([requestListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101http.createClient([port], [host]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Class: http.Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

    6

  • CONTENTS

    Event: request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Event: connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Event: close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Event: checkContinue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Event: connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Event: upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Event: clientError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103server.listen(port, [hostname], [backlog], [callback]) . . . . . . . . . . . . . . . . . . . . . . . . 103server.listen(path, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103server.listen(handle, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103server.close([callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103server.maxHeadersCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103server.setTimeout(msecs, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104server.timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

    Class: http.ServerResponse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Event: close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Event: finish . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104response.writeContinue() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104response.writeHead(statusCode, [statusMessage], [headers]) . . . . . . . . . . . . . . . . . . . 104response.setTimeout(msecs, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105response.statusCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105response.statusMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105response.setHeader(name, value) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105response.headersSent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106response.sendDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106response.getHeader(name) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106response.removeHeader(name) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106response.write(chunk, [encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106response.addTrailers(headers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106response.end([data], [encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

    http.request(options, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107http.get(options, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108Class: http.Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

    new Agent([options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109agent.maxSockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109agent.maxFreeSockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109agent.sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109agent.freeSockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109agent.requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109agent.destroy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109agent.getName(options) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    http.globalAgent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Class: http.ClientRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    Event: response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Event: socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Event: connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Event: upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Event: continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112request.write(chunk, [encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112request.end([data], [encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112request.abort() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113request.setTimeout(timeout, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113request.setNoDelay([noDelay]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113request.setSocketKeepAlive([enable], [initialDelay]) . . . . . . . . . . . . . . . . . . . . . . . . 113

    http.IncomingMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113Event: close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113message.httpVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113message.headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113message.rawHeaders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113message.trailers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114message.rawTrailers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    7

  • CONTENTS

    message.setTimeout(msecs, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114message.method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114message.url . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114message.statusCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115message.statusMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115message.socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

    HTTPS 116Class: https.Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

    server.setTimeout(msecs, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116server.timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

    https.createServer(options, [requestListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116server.listen(port, [host], [backlog], [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . 117server.listen(path, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117server.listen(handle, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117server.close([callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

    https.request(options, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117https.get(options, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Class: https.Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119https.globalAgent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

    Modules 120Cycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120Core Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121File Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121Loading from node_modules Folders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Folders as Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

    Module Caching Caveats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122The module Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

    module.exports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123module.require(id) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123module.id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124module.filename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124module.loaded . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124module.parent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124module.children . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

    All Together. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124Loading from the global folders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125Accessing the main module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125Addenda: Package Manager Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

    net 127net.createServer([options], [connectionListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127net.connect(options, [connectionListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127net.createConnection(options, [connectionListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . 127net.connect(port, [host], [connectListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128net.createConnection(port, [host], [connectListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . 128net.connect(path, [connectListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128net.createConnection(path, [connectListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128Class: net.Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

    server.listen(port, [host], [backlog], [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . 128server.listen(path, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129server.listen(handle, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129server.close([callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129server.address() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129server.unref() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130server.ref() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130server.maxConnections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130server.connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130server.getConnections(callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Event: listening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

    8

  • CONTENTS

    Event: connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Event: close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Event: error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

    Class: net.Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131new net.Socket([options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131socket.connect(port, [host], [connectListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . 131socket.connect(path, [connectListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131socket.bufferSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131socket.setEncoding([encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132socket.write(data, [encoding], [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132socket.end([data], [encoding]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132socket.destroy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132socket.pause() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132socket.resume() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132socket.setTimeout(timeout, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132socket.setNoDelay([noDelay]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132socket.setKeepAlive([enable], [initialDelay]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132socket.address() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133socket.unref() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133socket.ref() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133socket.remoteAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133socket.remotePort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133socket.localAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133socket.localPort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133socket.bytesRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133socket.bytesWritten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133Event: lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133Event: connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133Event: data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Event: end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Event: timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Event: drain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Event: error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Event: close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    net.isIP(input) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134net.isIPv4(input) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134net.isIPv6(input) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    os 135os.tmpdir() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135os.endianness() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135os.hostname() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135os.type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135os.platform() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135os.arch() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135os.release() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135os.uptime() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135os.loadavg() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135os.totalmem() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135os.freemem() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136os.cpus() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136os.networkInterfaces() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137os.EOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

    Path 138path.normalize(p) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138path.join([path1], [path2], [. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138path.resolve([from . . . ], to) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138path.isAbsolute(path) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139path.relative(from, to) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139path.dirname(p) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139path.basename(p, [ext]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

    9

  • CONTENTS

    path.extname(p) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140path.sep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140path.delimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

    process 142Exit Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Event: exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Event: beforeExit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Event: uncaughtException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Signal Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143process.stdout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144process.stderr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144process.stdin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144process.argv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145process.execPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145process.execArgv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145process.abort() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146process.chdir(directory) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146process.cwd() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146process.env . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146process.exit([code]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146process.exitCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146process.getgid() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146process.setgid(id) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147process.getuid() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147process.setuid(id) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147process.getgroups() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147process.setgroups(groups) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147process.initgroups(user, extra_group) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148process.version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148process.versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148process.config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148process.kill(pid, [signal]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149process.pid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149process.title . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149process.arch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149process.platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150process.memoryUsage() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150process.nextTick(callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150process.umask([mask]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151process.uptime() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151process.hrtime() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

    punycode 152punycode.decode(string) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152punycode.encode(string) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152punycode.toUnicode(domain) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152punycode.toASCII(domain) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152punycode.ucs2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

    punycode.ucs2.decode(string) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152punycode.ucs2.encode(codePoints) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

    punycode.version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

    Query String 154querystring.stringify(obj, [sep], [eq]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154querystring.parse(str, [sep], [eq], [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154querystring.escape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154querystring.unescape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

    Readline 155readline.createInterface(options) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155Class: Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

    10

  • CONTENTS

    rl.setPrompt(prompt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156rl.prompt([preserveCursor]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156rl.question(query, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156rl.pause() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156rl.resume() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156rl.close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156rl.write(data, [key]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

    Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Event: line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Event: pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Event: resume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Event: close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Event: SIGINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158Event: SIGTSTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158Event: SIGCONT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

    Example: Tiny CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158readline.cursorTo(stream, x, y) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159readline.moveCursor(stream, dx, dy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159readline.clearLine(stream, dir) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159readline.clearScreenDown(stream) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

    REPL 160repl.start(options) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

    Event: exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161Event: reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

    REPL Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

    Stream 163API for Stream Consumers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

    Class: stream.Readable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164Class: stream.Writable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168Class: stream.Duplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170Class: stream.Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

    API for Stream Implementors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171Class: stream.Readable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171Class: stream.Writable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175writable._writev(chunks, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Class: stream.Duplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Class: stream.Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Class: stream.PassThrough . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

    Streams: Under the Hood . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179Buffering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179stream.read(0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179stream.push() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179Compatibility with Older Node Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179Object Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180State Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

    StringDecoder 182Class: StringDecoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

    decoder.write(buffer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182decoder.end() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

    Timers 183setTimeout(callback, delay, [arg], [. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183clearTimeout(timeoutObject) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183setInterval(callback, delay, [arg], [. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183clearInterval(intervalObject) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183unref() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183ref() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183setImmediate(callback, [arg], [. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183clearImmediate(immediateObject) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

    11

  • CONTENTS

    TLS (SSL) 184Client-initiated renegotiation attack mitigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184NPN and SNI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184Perfect Forward Secrecy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185tls.getCiphers() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185tls.createServer(options, [secureConnectionListener]) . . . . . . . . . . . . . . . . . . . . . . . . . . 185tls.connect(options, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187tls.connect(port, [host], [options], [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187Class: tls.TLSSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188new tls.TLSSocket(socket, options) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189tls.createSecurePair([credentials], [isServer], [requestCert], [rejectUnauthorized]) . . . . . . . . . . . 189Class: SecurePair . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

    Event: secure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189Class: tls.Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

    Event: secureConnection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190Event: clientError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190Event: newSession . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190Event: resumeSession . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190server.listen(port, [host], [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190server.close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190server.address() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190server.addContext(hostname, credentials) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191server.maxConnections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191server.connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

    Class: CryptoStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191cryptoStream.bytesWritten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

    Class: tls.TLSSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191Event: secureConnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191tlsSocket.encrypted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191tlsSocket.authorized . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191tlsSocket.authorizationError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191tlsSocket.getPeerCertificate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192tlsSocket.getCipher() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192tlsSocket.renegotiate(options, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192tlsSocket.setMaxSendFragment(size) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192tlsSocket.getSession() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192tlsSocket.getTLSTicket() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193tlsSocket.address() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193tlsSocket.remoteAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193tlsSocket.remotePort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193tlsSocket.localAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193tlsSocket.localPort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

    Tracing 194v8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

    Event: gc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194getHeapStatistics() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

    Async Listeners 194tracing.createAsyncListener(callbacksObj[, userData]) . . . . . . . . . . . . . . . . . . . . . . . . . 195tracing.addAsyncListener(callbacksObj[, userData]) . . . . . . . . . . . . . . . . . . . . . . . . . . . 195tracing.addAsyncListener(asyncListener) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195tracing.removeAsyncListener(asyncListener) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

    TTY 198tty.isatty(fd) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198tty.setRawMode(mode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198Class: ReadStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

    rs.isRaw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198rs.setRawMode(mode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

    Class: WriteStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198ws.columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

    12

  • CONTENTS

    ws.rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198Event: resize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

    UDP / Datagram Sockets 200dgram.createSocket(type, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200Class: dgram.Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

    Event: message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200Event: listening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200Event: close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200Event: error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201socket.send(buf, offset, length, port, address, [callback]) . . . . . . . . . . . . . . . . . . . . . 201socket.bind(port, [address], [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201socket.close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202socket.address() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202socket.setBroadcast(flag) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202socket.setTTL(ttl) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202socket.setMulticastTTL(ttl) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203socket.setMulticastLoopback(flag) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203socket.addMembership(multicastAddress, [multicastInterface]) . . . . . . . . . . . . . . . . . . 203socket.dropMembership(multicastAddress, [multicastInterface]) . . . . . . . . . . . . . . . . . 203socket.unref() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203socket.ref() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

    URL 204url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) . . . . . . . . . . . . . . . . . . . . . . . 204url.format(urlObj) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205url.resolve(from, to) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

    util 206util.debuglog(section) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206util.format(format, [. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206util.log(string) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206util.inspect(object, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

    Customizing util.inspect colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207Custom inspect() function on Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

    util.isArray(object) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208util.isRegExp(object) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208util.isDate(object) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208util.isError(object) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208util.inherits(constructor, superConstructor) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209util.debug(string) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209util.error([. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209util.puts([. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209util.print([. . . ]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209util.pump(readableStream, writableStream, [callback]) . . . . . . . . . . . . . . . . . . . . . . . . . 210

    Executing JavaScript 211vm.runInThisContext(code, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211vm.createContext([sandbox]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211vm.isContext(sandbox) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211vm.runInContext(code, contextifiedSandbox, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . 212vm.runInNewContext(code, [sandbox], [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212Class: Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

    new vm.Script(code, options) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212script.runInThisContext([options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213script.runInContext(contextifiedSandbox, [options]) . . . . . . . . . . . . . . . . . . . . . . . . 213script.runInNewContext([sandbox], [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

    Zlib 215Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215zlib.createGzip([options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216zlib.createGunzip([options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

    13

  • CONTENTS

    zlib.createDeflate([options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216zlib.createInflate([options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216zlib.createDeflateRaw([options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216zlib.createInflateRaw([options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217zlib.createUnzip([options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Class: zlib.Zlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

    zlib.flush([kind], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217zlib.params(level, strategy, callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217zlib.reset() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

    Class: zlib.Gzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Class: zlib.Gunzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Class: zlib.Deflate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Class: zlib.Inflate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Class: zlib.DeflateRaw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Class: zlib.InflateRaw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Class: zlib.Unzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Convenience Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.deflate(buf, [options], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.deflateSync(buf, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.deflateRaw(buf, [options], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.deflateRawSync(buf, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.gzip(buf, [options], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.gzipSync(buf, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.gunzip(buf, [options], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.gunzipSync(buf, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.inflate(buf, [options], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.inflateSync(buf, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.inflateRaw(buf, [options], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.inflateRawSync(buf, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.unzip(buf, [options], callback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218zlib.unzipSync(buf, [options]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219Memory Usage Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

    14

  • ABOUT THIS DOCUMENTATION

    About this Documentation

    The goal of this documentation is to comprehensively explain the Node.js API, both from a reference as wellas a conceptual point of view. Each section describes a built-in module or high-level concept.

    Where appropriate, property types, method arguments, and the arguments provided to event handlers aredetailed in a list underneath the topic heading.

    Every .html document has a corresponding .json document presenting the same information in a structuredmanner. This feature is experimental, and added for the benefit of IDEs and other utilities that wish to doprogrammatic things with the documentation.

    Every .html and .json file is generated based on the corresponding .markdown file in the doc/api/ folder innodes source tree. The documentation is generated using the tools/doc/generate.js program. The HTMLtemplate is located at doc/template.html.

    Stability Index

    Throughout the documentation, you will see indications of a sections stability. The Node.js API is stillsomewhat changing, and as it matures, certain parts are more reliable than others. Some are so proven, andso relied upon, that they are unlikely to ever change at all. Others are brand new and experimental, or knownto be hazardous and in the process of being redesigned.

    The stability indices are as follows:

    Stability: 0 - DeprecatedThis feature is known to be problematic, and changes areplanned. Do not rely on it. Use of the feature may cause warnings. Backwardscompatibility should not be expected.

    Stability: 1 - ExperimentalThis feature was introduced recently, and may changeor be removed in future versions. Please try it out and provide feedback.If it addresses a use-case that is important to you, tell the node core team.

    Stability: 2 - UnstableThe API is in the process of settling, but has not yet hadsufficient real-world testing to be considered stable. Backwards-compatibilitywill be maintained if reasonable.

    Stability: 3 - StableThe API has proven satisfactory, but cleanup in the underlyingcode may cause minor changes. Backwards-compatibility is guaranteed.

    Stability: 4 - API FrozenThis API has been tested extensively in production and isunlikely to ever have to change.

    Stability: 5 - LockedUnless serious bugs are found, this code will not everchange. Please do not suggest changes in this area; they will be refused.

    JSON Output

    Stability: 1 - Experimental

    Every HTML file in the markdown has a corresponding JSON file with the same data.

    This feature is new as of node v0.6.12. It is experimental.

    15

  • SYNOPSIS

    Synopsis

    An example of a web server written with Node which responds with Hello World:var http = require(http);

    http.createServer(function (request, response) {response.writeHead(200, {Content-Type: text/plain});response.end(Hello World\n);

    }).listen(8124);

    console.log(Server running at http://127.0.0.1:8124/);

    To run the server, put the code into a file called example.js and execute it with the node program> node example.jsServer running at http://127.0.0.1:8124/

    All of the examples in the documentation can be run similarly.

    16

  • ASSERT

    Assert

    Stability: 5 - Locked

    This module is used for writing unit tests for your applications, you can access it with require(assert).

    assert.fail(actual, expected, message, operator)

    Throws an exception that displays the values for actual and expected separated by the provided operator.

    assert(value, message), assert.ok(value, [message])

    Tests if value is truthy, it is equivalent to assert.equal(true, !!value, message);

    assert.equal(actual, expected, [message])

    Tests shallow, coercive equality with the equal comparison operator ( == ).

    assert.notEqual(actual, expected, [message])

    Tests shallow, coercive non-equality with the not equal comparison operator ( != ).

    assert.deepEqual(actual, expected, [message])

    Tests for deep equality.

    assert.notDeepEqual(actual, expected, [message])

    Tests for any deep inequality.

    assert.strictEqual(actual, expected, [message])

    Tests strict equality, as determined by the strict equality operator ( === )

    assert.notStrictEqual(actual, expected, [message])

    Tests strict non-equality, as determined by the strict not equal operator ( !== )

    assert.throws(block, [error], [message])

    Expects block to throw an error. error can be constructor, RegExp or validation function.

    Validate instanceof using constructor:assert.throws(function() {throw new Error("Wrong value");

    },Error

    );

    Validate error message using RegExp:

    1