-
Notifications
You must be signed in to change notification settings - Fork 5
Api changes between v0.8 and v0.10
このページは Api-changes-between-v0.8-and-v0.10 (193b80e) の翻訳です。このページに記述されていない変更点を追加する場合は、本家を先に更新してください。誤訳や誤字を見つけた場合はこのページを編集してください。
-
- Readable, Writable, Duplex, そして Transform ベースクラスが追加されました。
- Readable ストリームは、すぐに
'data'
イベントを発する代わりに、read()
メソッドを使用します。 -
'data'
イベントハンドラを追加するか、pause()
またはresume()
を呼び出すと、"旧モード" に切り替わります。- これは、
data
イベントハンドラはそれが追加されるより前の最初のチャンクを失わないことと、pause()
はもはや単なるアドバイスではないことを意味します。
- これは、
- もしデータを消費しなければ、ストリームはずっと中断状態となります。そして
'end'
イベントは決して発生しません。
-
process.title
は環境を上書きしません. これは、process.title
の長さはバイナリ名 + コマンドライン引数の長さに制限されるようになったことを意味します。よいこととして、OS X でも動作するようになりました! -
uv_after_work_cb
のシグネチャが変更され、状態を示すために2番目の整数型の引数を受け取るようになりました。後方互換性のため、第4引数は明示的にuv_queue_work
にキャストします。例 -
process.nextTick
は現在の tick が終わった後、現在のスタックが巻き戻された直後に発生します。もし再帰処理のために nextTick を使っているなら、代わりにsetImmediate
を使ってください。 -
-p --print
コマンドライン引数は-e --eval
を意味します。 -
net: net.createServer() によって作成されるソケットはもはや
'connect'
イベントを生成しません。'connection'
イベントのリスナが呼ばれた時、ソケットはすでに接続済みです。そのため、これは余計です。これは元々、Socket オブジェクトの再利用をサポートするためのものでしたが、それは Node v0.4 以前から実際には不可能でした。サーバが Socket を得た時にそれはすでに接続済みですから、イベントを生成するというのは明らかに間違いでした。サーバ上でソケットを得るとき、それはすでに接続済みなので、すぐにそれを使うことができます。 -
url: 解析されたオブジェクトは常に全てのプロパティを含み、使われていないものには
null
が設定されます。例:// 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: エラーオブジェクトに加えられるプロパティは、スネークケースではなくキャメルケースになりました。
-
path.resolve
およびpath.join
は文字列以外の入力に対して TypeError をスローします。 -
dgram.Socket#bind()
は常に非同期になりました。もし次のようなコードがあると:var s = dgram.createSocket('udp4'); s.bind(1234); s.addMembership('224.0.0.114');
これは次のように変更されなければなりません。
var s = dgram.createSocket('udp4'); s.bind(1234, function() { s.addMembership('224.0.0.114'); });
-
EventEmitter
のコンストラクタは様々なプロパティを設定するようになりました。それは今でも OOP 継承の親として動作しますが、正しく継承しなければなりません。「壊れたスタイル」の継承パターンで拡張された EventEmitter の拡張クラスは動作しないでしょう。そのスタイルの継承はこれまでもサポートされていませんでしたが、0.10 以前は実際には問題になりませんでした。// 壊れたスタイルの継承、これは安全でもなければよくもありませんでしたが、 // Webでは多くの壊れたチュートリアルで見られます。 function Child() {} Child.prototype = new Parent(); // <-- 決してやってはいけません!! // もしこれをどこかの JavaScript ライブラリで見かけたら、 // これは大きくて酷い間違いだ! と教えてください。 // クラスの継承は、全ての子クラスのインスタンスから共有されるプロトタイプ上で // そのクラスのコンストラクタを呼び出してはいけません! // 正しいスタイルの継承 function Child() { Parent.call(this); } Child.prototype = Object.create(Parent.prototype, { constructor: { value: Child, enumerable: false, writable: true, configurable: true } }); // 「なんてたくさんの行! ヘルパーメソッドはないの!」 // あります。こうしてください: util.inherits(Child, Parent);
-
https はデフォルトで相手の証明書を検証するようになりました。 これは、デフォルト CA リストにない認証局を使って SSL エンドポイントにアクセスを試みた場合、以前にはなかったエラーを受け取ることを意味します。
rejectUnauthorized
をfalse
に設定することにより、以前の振る舞いになります。 -
https.createServer の作成時に SSL オプションが必要になり、それが設定されないと例外がスローされるようになりました。以前のバージョンでは、
.listen()
を呼び出すまでオプションを渡さなくても許容されていました。 -
os.tmpDir()
はos.tmpdir()
に改名されました。os.tmpDir()
は別名として利用可能です。 -
ネイティブ アドオン は、完全な
module
オブジェクトを受け取れるようになり、カスタムのオブジェクトまたは関数 (すなわち "substack パターン) でexports
を上書きすることが可能になりました。 単にInit()
関数に第2引数を加えることで、module
オブジェクトが与えられます:void Init(Handle<Object> exports, Handle<Object> module);
アドオンの例 は昔からの方法と、exports
を上書きする方法の両方を混在させています (追加のサンプルは GitHub repo から利用可能です)。旧来の方法
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())
一つの関数を
exports
Handle<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')())
-
fs
モジュールの操作は、コールバックが提供されない場合に例外をスローするようになります。これは、コールバック関数が忘れられた場合に潜在的に危険なエラーを逃すことを防ぎます。エラーを無視するには、function(){}
をコールバックとして渡してください。fs の操作にコールバックを指定していないソースを突き止めるには、NODE_DEBUG=fs
環境変数を設定してください。 -
fs
モジュールのreadFile()
、writeFile()
、appendFile()
およびそれらの同期版は、options
オブジェクトを受け取るようになりました (ただし、encoding
文字列を受け取る古い API もサポートされています)。 -
Crypto のメソッドは、デフォルトでバイナリエンコードされた文字列ではなく、Buffer オブジェクトを返すようになりました。
-
util.inspect()
はoptions
オブジェクトを受け取るようになりました。後方互換性のために、古い API もサポートされています。
- Streams - Readable, Writable, Duplex, そして Transform ベースクラス
- Crypto API のストリーミングインタフェース
- process:
getgroups()
,setgroups()
,initgroups()
- crypto:
getHashes()
,getCiphers()
- http:
response.headerSent
プロパティ - events:
'removeListener'
イベント -
setImmediate()
およびclearImmediate()
関数 - string_decoder:
decoder.end()
関数と BASE-64 エンコーディング - fs:
ftruncate()
およびftruncateSync()
- buffer:
Buffer.prototype.toJSON()
関数