-
Notifications
You must be signed in to change notification settings - Fork 0
Api changes between v0.8 and v0.10
When editing this page please be as detailed as possible. Examples are encouraged!
-
- Readable, Writable, Duplex, and Transform base classes added.
- Readable streams use a
read()method instead of emitting'data'events right away. - Adding a
'data'event handler, or callingpause()orresume()will switch into "old mode".- This means that
dataevent handlers won't ever miss the first chunk if they're not added right away, andpause()is no longer merely advisory.
- This means that
- If you don't consume the data, then streams will sit in a paused state forever, and the
endevent will never happen.
-
The
uv_after_work_cbsignature has changed to take a second integer argument indicating status. For backwards compatibility, explicitly cast the 4th argument touv_queue_work. Example -
process.nextTickhappens at the end of the current tick, immediately after the current stack unwinds. If you are currently using recursive nextTick calls, usesetImmediateinstead. -
-p --printcommand line switch implies-e --eval -
net: sockets created with net.createServer() no longer emit a
connectevent. The socket is already connected, by the time theconnectionListenercallback is called, so this was considered superfluous -
url: Parsed objects always have all properties, but unused ones are set to
null. Example:// v0.8 > url.parse('http://foo') { protocol: 'http:', slashes: true, host: 'foo', hostname: 'foo', href: 'http://foo/', pathname: '/', path: '/' } // 0.10 > url.parse('http://foo') { protocol: 'http:', slashes: true, auth: null, host: 'foo', port: null, hostname: 'foo', hash: null, search: null, query: null, pathname: '/', path: '/', href: 'http://foo/' }
-
Domain-added properties on error objects are
camelCaseinstead ofsnake_case -
path.resolveandpath.jointhrow a TypeError on non-string input -
dgram.Socket#bind()is always asynchronous now. If you have code that looks like this:var s = dgram.createSocket('udp4'); s.bind(1234); s.addMembership('224.0.0.114');
You have to change it to this:
var s = dgram.createSocket('udp4'); s.bind(1234, function() { s.addMembership('224.0.0.114'); });
-
The
EventEmitterconstructor initializes various properties now. It still works fine as an OOP inheritance parent, but you have to do inheritance properly. The Broken-Style JS inheritance pattern will not work when extending the EventEmitter class. This inheritance style was never supported, but prior to 0.10, it did not actually break.// Broken-Style Inheritance, which has never been safe or wise // but is shown on many broken tutorials around the web. function Child() {} Child.prototype = new Parent(); // <-- NEVER EVER DO THIS!! // If you see anyone doing this in any javascript library ever, // post a bug telling them that it is a huge terrible mistake! // Inheriting from a class should not call that class's ctor // on the prototype shared with EVERY instance of the child class! // Correct-Style Inheritance function Child() { Parent.call(this); } Child.prototype = Object.create(Parent.prototype, { constructor: { value: Child, enumerable: false, writable: true, configurable: true } }); // "Gee that's a lot of lines! I wish there was a helper method!" // There is. Do this: util.inherits(Child, Parent);
-
https now does peer verification by default. This means that if you try to access an SSL endpoint which has a Certificate Authority that is not in the default CA list, you will get an error where you did not before. You can set
rejectUnauthorizedtofalseto get the old behavior. -
Native addons can now receive the complete
moduleobject, allowing them to overrideexportswith a custom object or function (i.e. the "substack pattern"). Simply adding a second argument to yourInit()function gives you themoduleobject:void Init(Handle<Object> exports, Handle<Object> module);. The addons examples now mix both classic andexports-overriding patterns (additionally the examples are now available in a GitHub repo).Classic
Handle<Value> Booya(const Arguments& args) { HandleScope scope; return scope.Close(String::New("hello world")); } void Init(Handle<Object> exports) { exports->Set(String::NewSymbol("booya"), FunctionTemplate::New(Booya)->GetFunction()); } NODE_MODULE(addon, Init)
console.log(require('./build/Release/addon').booya())
Single-function on
exportsHandle<Value> Booya(const Arguments& args) { HandleScope scope; return scope.Close(String::New("hello world")); } void Init(Handle<Object> exports, Handle<Object> module) { module->Set(String::NewSymbol("exports"), FunctionTemplate::New(Booya)->GetFunction()); } NODE_MODULE(addon, Init)
console.log(require('./build/Release/addon')())
- Streams - Added base classes for Readable, Writable, Duplex, and Transform
- Streaming interfaces for Crypto API
- process: add getgroups(), setgroups(), initgroups()
- crypto: getHashes() getCiphers()
- http: add response.headersSent property
- events: 'removeListener' event
- setImmediate() and clearImmediate() functions
- string_decoder: the decoder.end() function was added