diff --git a/about/index.html b/about/index.html index 5b07b25..a10a680 100644 --- a/about/index.html +++ b/about/index.html @@ -125,7 +125,7 @@
Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/_toc.html b/api/_toc.html index 3404341..71433f8 100644 --- a/api/_toc.html +++ b/api/_toc.html @@ -2,7 +2,7 @@ -Index | @@ -131,7 +131,7 @@
Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
Index | @@ -174,22 +174,22 @@
#include <node.h>
+// addon.cc
+#include <node.h>
using namespace v8;
-Handle<Value> Add(const Arguments& args) {
+void Add(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
if (args.Length() < 2) {
- ThrowException(Exception::TypeError(
- String::New("Wrong number of arguments")));
- return scope.Close(Undefined(isolate));
+ isolate->ThrowException(Exception::TypeError(
+ String::NewFromUtf8(isolate, "Wrong number of arguments")));
+ return;
}
if (!args[0]->IsNumber() || !args[1]->IsNumber()) {
- ThrowException(Exception::TypeError(String::New("Wrong arguments")));
- return scope.Close(Undefined(isolate));
+ isolate->ThrowException(Exception::TypeError(
+ String::NewFromUtf8(isolate, "Wrong arguments")));
+ return;
}
Local<Number> num = Number::New(args[0]->NumberValue() +
args[1]->NumberValue());
- return scope.Close(num);
+
+ args.GetReturnValue().Set(num);
}
void Init(Handle<Object> exports) {
- exports->Set(String::NewSymbol("add"),
- FunctionTemplate::New(Add)->GetFunction());
+ NODE_SET_METHOD(exports, "add", Add);
}
NODE_MODULE(addon, Init)
@@ -393,7 +396,8 @@ Function arguments以下の JavaScript コード片でテストすることができます。
-var addon = require('./build/Release/addon');
+// test.js
+var addon = require('./build/Release/addon');
console.log( 'This should be eight:', addon.add(3,5) );
Callbacks#
@@ -406,25 +410,23 @@ Callbacksaddon.cc
を準備します:
-#include <node.h>
+// addon.cc
+#include <node.h>
#include "myobject.h"
using namespace v8;
@@ -577,10 +583,12 @@ Wrapping C++ objects次に、node::ObjectWrap
を継承したラッパーを myobject.h
に作成します。
-#ifndef MYOBJECT_H
+// myobject.h
+#ifndef MYOBJECT_H
#define MYOBJECT_H
#include <node.h>
+#include <node_object_wrap.h>
class MyObject : public node::ObjectWrap {
public:
@@ -590,8 +598,8 @@ Wrapping C++ objectsWrapping C++ objectsplusOne
を公開しています:
-#include <node.h>
-#include <node_object_wrap.h>
+// myobject.cc
#include "myobject.h"
using namespace v8;
@@ -626,20 +633,18 @@ Wrapping C++ objectsWrapping C++ objects
\n\nでは、 以下の JavaScript コードと同じ様に動作する小さなアドオンを\nC++ で作成してみましょう。\n\n
\nmodule.exports.hello = function() { return 'world'; };
\n\n\n最初に hello.cc
というファイルを作成します:\n\n\n
\n#include <node.h>\n\nusing namespace v8;\n\nHandle<Value> Method(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n return scope.Close(String::New("world"));\n}\n\nvoid init(Handle<Object> exports) {\n exports->Set(String::NewSymbol("hello"),\n FunctionTemplate::New(Method)->GetFunction());\n}\n\nNODE_MODULE(hello, init)
\n\n\n全ての Node アドオンは初期化関数をエクスポートしなければならないことに\n注意してください。\n\n
\nvoid Initialize (Handle<Object> exports);\nNODE_MODULE(module_name, Initialize)
\n\n\nNODE_MODULE
は関数ではないので、その後にセミコロンを付けてはいけません\n(node.h
を参照してください)。\n\n
\nmodule_name
は最終的なバイナリのファイル名 (拡張子 .node を除く)\nとマッチする必要があります。\n\n
\nこのソースコードは、hello.node
というバイナリアドオンとしてビルドされる必要が有ります。\nそのために binding.gyp
と呼ばれる、あなたのモジュールをビルドするための\n構成を JSON 的なフォーマットで記述したファイルを作成します。\nこのファイルは node-gyp\nによってコンパイルされます。\n\n
\n{\n "targets": [\n {\n "target_name": "hello",\n "sources": [ "hello.cc" ]\n }\n ]\n}
\n\n\n次のステップは現在のプラットフォームに適したプロジェクトビルドファイルを\n生成することです。\nnode-gyp configure
を使います。\n\n
\n\n\nこれで、Makefile
(Unix プラットフォームの場合)、または vcxproj
ファイル\n(Windows の場合) が build/
ディレクトリに作られます。\n次に node-gyp build
コマンドを起動します。\n\n
\n\n\nこれでコンパイルされた .node
バインディングファイルが作成されます!\nコンパイルされたバインディングファイルは build/Release/
にあります。\n\n
\n\n\nビルドされた hello.node
モジュールを require
で指定することにより、\nこのバイナリアドオンを Node プロジェクトの hello.js
から利用することが\n可能になります。\n\n
\nvar addon = require('./build/Release/hello');\n\nconsole.log(addon.hello()); // 'world'
\n\n\nさらに詳しい情報については下記のパターンか、\n
\nhttps://github.com/arturadib/node-qt を実際のプロダクトにおける\n例として参照してください。\n\n
\n",
+ "desc": "\n\nでは、 以下の JavaScript コードと同じ様に動作する小さなアドオンを\nC++ で作成してみましょう。\n\n
\nmodule.exports.hello = function() { return 'world'; };
\n\n\n最初に hello.cc
というファイルを作成します:\n\n\n
\n// hello.cc\n#include <node.h>\n\nusing namespace v8;\n\nvoid Method(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));\n}\n\nvoid init(Handle<Object> exports) {\n NODE_SET_METHOD(exports, "hello", Method);\n}\n\nNODE_MODULE(addon, init)
\n\n\n全ての Node アドオンは初期化関数をエクスポートしなければならないことに\n注意してください。\n\n
\nvoid Initialize (Handle<Object> exports);\nNODE_MODULE(module_name, Initialize)
\n\n\nNODE_MODULE
は関数ではないので、その後にセミコロンを付けてはいけません\n(node.h
を参照してください)。\n\n
\nmodule_name
は最終的なバイナリのファイル名 (拡張子 .node を除く)\nとマッチする必要があります。\n\n
\nこのソースコードは、addon.node
というバイナリアドオンとしてビルドされる必要が有ります。\nそのために binding.gyp
と呼ばれる、あなたのモジュールをビルドするための\n構成を JSON 的なフォーマットで記述したファイルを作成します。\nこのファイルは node-gyp\nによってコンパイルされます。\n\n
\n{\n "targets": [\n {\n "target_name": "addon",\n "sources": [ "hello.cc" ]\n }\n ]\n}
\n\n\n次のステップは現在のプラットフォームに適したプロジェクトビルドファイルを\n生成することです。\nnode-gyp configure
を使います。\n\n
\n\n\nこれで、Makefile
(Unix プラットフォームの場合)、または vcxproj
ファイル\n(Windows の場合) が build/
ディレクトリに作られます。\n次に node-gyp build
コマンドを起動します。\n\n
\n\n\nこれでコンパイルされた .node
バインディングファイルが作成されます!\nコンパイルされたバインディングファイルは build/Release/
にあります。\n\n
\n\n\nビルドされた hello.node
モジュールを require
で指定することにより、\nこのバイナリアドオンを Node プロジェクトの hello.js
から利用することが\n可能になります。\n\n
\n// hello.js\nvar addon = require('./build/Release/addon');\n\nconsole.log(addon.hello()); // 'world'
\n\n\nさらに詳しい情報については下記のパターンか、\n
\nhttps://github.com/arturadib/node-qt を実際のプロダクトにおける\n例として参照してください。\n\n
\n",
"type": "module",
"displayName": "Hello world"
},
@@ -21,49 +21,49 @@
{
"textRaw": "Function arguments",
"name": "function_arguments",
- "desc": "\n\n以下のパターンは JavaScript から呼び出された関数で引数を読み出したり、\n結果を返す方法を示します。これは addon.cc
でのみ必要となります。\n\n
\n#include <node.h>\n\nusing namespace v8;\n\nHandle<Value> Add(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.Length() < 2) {\n ThrowException(Exception::TypeError(\n String::New("Wrong number of arguments")));\n return scope.Close(Undefined(isolate));\n }\n\n if (!args[0]->IsNumber() || !args[1]->IsNumber()) {\n ThrowException(Exception::TypeError(String::New("Wrong arguments")));\n return scope.Close(Undefined(isolate));\n }\n\n Local<Number> num = Number::New(args[0]->NumberValue() +\n args[1]->NumberValue());\n return scope.Close(num);\n}\n\nvoid Init(Handle<Object> exports) {\n exports->Set(String::NewSymbol("add"),\n FunctionTemplate::New(Add)->GetFunction());\n}\n\nNODE_MODULE(addon, Init)
\n\n\n以下の JavaScript コード片でテストすることができます。\n\n
\nvar addon = require('./build/Release/addon');\n\nconsole.log( 'This should be eight:', addon.add(3,5) );
\n",
+ "desc": "\n\n以下のパターンは JavaScript から呼び出された関数で引数を読み出したり、\n結果を返す方法を示します。これは addon.cc
でのみ必要となります。\n\n
\n// addon.cc\n#include <node.h>\n\nusing namespace v8;\n\nvoid Add(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.Length() < 2) {\n isolate->ThrowException(Exception::TypeError(\n String::NewFromUtf8(isolate, "Wrong number of arguments")));\n return;\n }\n\n if (!args[0]->IsNumber() || !args[1]->IsNumber()) {\n isolate->ThrowException(Exception::TypeError(\n String::NewFromUtf8(isolate, "Wrong arguments")));\n return;\n }\n\n Local<Number> num = Number::New(args[0]->NumberValue() +\n args[1]->NumberValue());\n\n args.GetReturnValue().Set(num);\n}\n\nvoid Init(Handle<Object> exports) {\n NODE_SET_METHOD(exports, "add", Add);\n}\n\nNODE_MODULE(addon, Init)
\n\n\n以下の JavaScript コード片でテストすることができます。\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\nconsole.log( 'This should be eight:', addon.add(3,5) );
\n",
"type": "module",
"displayName": "Function arguments"
},
{
"textRaw": "Callbacks",
"name": "callbacks",
- "desc": "\n\nJavaScript の関数を C++ の関数に渡してそこから呼び出すことができます。\nこれは addon.cc
です:\n\n
\n#include <node.h>\n\nusing namespace v8;\n\nHandle<Value> RunCallback(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<Function> cb = Local<Function>::Cast(args[0]);\n const unsigned argc = 1;\n Local<Value> argv[argc] = { String::New("hello world") };\n cb->Call(Context::GetCurrent()->Global(), argc, argv);\n\n return scope.Close(Undefined(isolate));\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n module->Set(String::NewSymbol("exports"),\n FunctionTemplate::New(RunCallback)->GetFunction());\n}\n\nNODE_MODULE(addon, Init)
\n\n\nこの例は二つの引数を取る形式の Init()
を使用して、第2引数で完全な module
\nオブジェクトを受け取っていることに注意してください。\nこれは、exports
のプロパティとして関数を加える代わりに、アドオンが\n一つの関数で exports
を完全に上書きすることを可能にします。\n\n
\n\n\n以下の JavaScript コード片でテストすることができます。\n\n
\nvar addon = require('./build/Release/addon');\n\naddon(function(msg){\n console.log(msg); // 'hello world'\n});
\n",
+ "desc": "\n\nJavaScript の関数を C++ の関数に渡してそこから呼び出すことができます。\nこれは addon.cc
です:\n\n
\n// addon.cc\n#include <node.h>\n\nusing namespace v8;\n\nvoid RunCallback(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<Function> cb = Local<Function>::Cast(args[0]);\n const unsigned argc = 1;\n Local<Value> argv[argc] = { String::NewFromUtf8(isolate, "hello world") };\n cb->Call(Context::GetCurrent()->Global(), argc, argv);\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n NODE_SET_METHOD(module, "exports", RunCallback);\n}\n\nNODE_MODULE(addon, Init)
\n\n\nこの例は二つの引数を取る形式の Init()
を使用して、第2引数で完全な module
\nオブジェクトを受け取っていることに注意してください。\nこれは、exports
のプロパティとして関数を加える代わりに、アドオンが\n一つの関数で exports
を完全に上書きすることを可能にします。\n\n
\n\n\n以下の JavaScript コード片でテストすることができます。\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\naddon(function(msg){\n console.log(msg); // 'hello world'\n});
\n",
"type": "module",
"displayName": "Callbacks"
},
{
"textRaw": "Object factory",
"name": "object_factory",
- "desc": "\n\nC++ 関数の中から新しいオブジェクトを作成して返すことができます。\n以下の addon.cc
のパターンでは、createObject()
に渡された文字列を\n反映する msg
プロパティを持ったオブジェクトを返します。\n\n
\n#include <node.h>\n\nusing namespace v8;\n\nHandle<Value> CreateObject(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<Object> obj = Object::New();\n obj->Set(String::NewSymbol("msg"), args[0]->ToString());\n\n return scope.Close(obj);\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n module->Set(String::NewSymbol("exports"),\n FunctionTemplate::New(CreateObject)->GetFunction());\n}\n\nNODE_MODULE(addon, Init)
\n\n\nテスト用の JavaScript:\n\n
\nvar addon = require('./build/Release/addon');\n\nvar obj1 = addon('hello');\nvar obj2 = addon('world');\nconsole.log(obj1.msg+' '+obj2.msg); // 'hello world'
\n",
+ "desc": "\n\nC++ 関数の中から新しいオブジェクトを作成して返すことができます。\n以下の addon.cc
のパターンでは、createObject()
に渡された文字列を\n反映する msg
プロパティを持ったオブジェクトを返します。\n\n
\n// addon.cc\n#include <node.h>\n\nusing namespace v8;\n\nvoid CreateObject(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<Object> obj = Object::New();\n obj->Set(String::NewFromUtf8(isolate, "msg"), args[0]->ToString());\n\n args.GetReturnValue().Set(obj);\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n NODE_SET_METHOD(module, "exports", CreateObject);\n}\n\nNODE_MODULE(addon, Init)
\n\n\nテスト用の JavaScript:\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\nvar obj1 = addon('hello');\nvar obj2 = addon('world');\nconsole.log(obj1.msg+' '+obj2.msg); // 'hello world'
\n",
"type": "module",
"displayName": "Object factory"
},
{
"textRaw": "Function factory",
"name": "function_factory",
- "desc": "\n\nこのパターンは C++ 関数をラップした JavaScript 関数を作成して返す方法を\n示します。\n\n
\n#include <node.h>\n\nusing namespace v8;\n\nHandle<Value> MyFunction(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n return scope.Close(String::New("hello world"));\n}\n\nHandle<Value> CreateFunction(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<FunctionTemplate> tpl = FunctionTemplate::New(MyFunction);\n Local<Function> fn = tpl->GetFunction();\n\n // omit this to make it anonymous\n fn->SetName(String::NewSymbol("theFunction"));\n\n return scope.Close(fn);\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n module->Set(String::NewSymbol("exports"),\n FunctionTemplate::New(CreateFunction)->GetFunction());\n}\n\nNODE_MODULE(addon, Init)
\n\n\nテスト:\n\n
\nvar addon = require('./build/Release/addon');\n\nvar fn = addon();\nconsole.log(fn()); // 'hello world'
\n",
+ "desc": "\n\nこのパターンは C++ 関数をラップした JavaScript 関数を作成して返す方法を\n示します。\n\n
\n// addon.cc\n#include <node.h>\n\nusing namespace v8;\n\nvoid MyFunction(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n args.GetReturnValue().Set(String::NewFromUtf8(isolate, "hello world"));\n}\n\nvoid CreateFunction(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<FunctionTemplate> tpl = FunctionTemplate::New(MyFunction);\n Local<Function> fn = tpl->GetFunction();\n\n // omit this to make it anonymous\n fn->SetName(String::NewFromUtf8(isolate, "theFunction"));\n\n args.GetReturnValue().Set(fn);\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n NODE_SET_METHOD(module, "exports", CreateFunction);\n}\n\nNODE_MODULE(addon, Init)
\n\n\nテスト:\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\nvar fn = addon();\nconsole.log(fn()); // 'hello world'
\n",
"type": "module",
"displayName": "Function factory"
},
{
"textRaw": "Wrapping C++ objects",
"name": "wrapping_c++_objects",
- "desc": "\n\nここでは、\nC++ オブジェクト/クラスをラップし、JavaScript から new 演算子を使って\nインスタンス化できる MyObject
を作成します。\n最初にメインモジュール addon.cc
を準備します:\n\n
\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nvoid InitAll(Handle<Object> exports) {\n MyObject::Init(exports);\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\n次に、node::ObjectWrap
を継承したラッパーを myobject.h
に作成します。\n\n
\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init(v8::Handle<v8::Object> exports);\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static v8::Handle<v8::Value> New(const v8::Arguments& args);\n static v8::Handle<v8::Value> PlusOne(const v8::Arguments& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\n公開したい様々なメソッドを myobject.cc
に実装します。\nここでは、コンストラクタに渡された値に加算する plusOne
を公開しています:\n\n
\n#include <node.h>\n#include <node_object_wrap.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init(Handle<Object> exports) {\n Isolate* isolate = Isolate::GetCurrent();\n\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewSymbol("MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n // Prototype\n tpl->PrototypeTemplate()->Set(String::NewSymbol("plusOne"),\n FunctionTemplate::New(PlusOne)->GetFunction());\n\n Persistent<Function> constructor\n = Persistent<Function>::New(isolate, tpl->GetFunction());\n\n exports->Set(String::NewSymbol("MyObject"), constructor);\n}\n\nHandle<Value> MyObject::New(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n return args.This();\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n return scope.Close(constructor->NewInstance(argc, argv));\n }\n}\n\nHandle<Value> MyObject::PlusOne(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());\n obj->value_ += 1;\n\n return scope.Close(Number::New(obj->value_));\n}
\n\n\nこれでテストします:\n\n
\nvar addon = require('./build/Release/addon');\n\nvar obj = new addon.MyObject(10);\nconsole.log( obj.plusOne() ); // 11\nconsole.log( obj.plusOne() ); // 12\nconsole.log( obj.plusOne() ); // 13
\n",
+ "desc": "\n\nここでは、\nC++ オブジェクト/クラスをラップし、JavaScript から new 演算子を使って\nインスタンス化できる MyObject
を作成します。\n最初にメインモジュール addon.cc
を準備します:\n\n
\n// addon.cc\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nvoid InitAll(Handle<Object> exports) {\n MyObject::Init(exports);\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\n次に、node::ObjectWrap
を継承したラッパーを myobject.h
に作成します。\n\n
\n// myobject.h\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n#include <node_object_wrap.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init(v8::Handle<v8::Object> exports);\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static void New(const v8::FunctionCallbackInfo<v8::Value>& args);\n static void PlusOne(const v8::FunctionCallbackInfo<v8::Value>& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\n公開したい様々なメソッドを myobject.cc
に実装します。\nここでは、コンストラクタに渡された値に加算する plusOne
を公開しています:\n\n
\n// myobject.cc\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init(Handle<Object> exports) {\n Isolate* isolate = Isolate::GetCurrent();\n\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewFromUtf8(isolate, "MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n // Prototype\n NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);\n\n constructor.Reset(isolate, tpl->GetFunction());\n exports->Set(String::NewFromUtf8(isolate, "MyObject"),\n tpl->GetFunction());\n}\n\nvoid MyObject::New(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n args.GetReturnValue().Set(args.This());\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n Local<Function> cons = Local<Function>::New(isolate, constructor);\n args.GetReturnValue().Set(cons->NewInstance(argc, argv));\n }\n}\n\nvoid MyObject::PlusOne(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());\n obj->value_ += 1;\n\n args.GetReturnValue().Set(Number::New(obj->value_));\n}
\n\n\nこれでテストします:\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\nvar obj = new addon.MyObject(10);\nconsole.log( obj.plusOne() ); // 11\nconsole.log( obj.plusOne() ); // 12\nconsole.log( obj.plusOne() ); // 13
\n",
"type": "module",
"displayName": "Wrapping C++ objects"
},
{
"textRaw": "Factory of wrapped objects",
"name": "factory_of_wrapped_objects",
- "desc": "\n\nJavaScript の new
演算子で明示的にインスタンス化することなく、\nネイティブオブジェクトを作成できるようにしたい場合に便利です。例:\n\n
\nvar obj = addon.createObject();\n// instead of:\n// var obj = new addon.Object();
\n\n\ncreateObject を
addon.cc` に登録しましょう:\n\n
\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nHandle<Value> CreateObject(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n return scope.Close(MyObject::NewInstance(args));\n}\n\nvoid InitAll(Handle<Object> exports, Handle<Object> module) {\n MyObject::Init();\n\n module->Set(String::NewSymbol("exports"),\n FunctionTemplate::New(CreateObject)->GetFunction());\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\nmyobject.h
にオブジェクトを生成する static メソッド NewInstance
を\n導入しましょう (すなわち,それが JavaScript 内の new
の働きをします)。\n\n
\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init();\n static v8::Handle<v8::Value> NewInstance(const v8::Arguments& args);\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static v8::Handle<v8::Value> New(const v8::Arguments& args);\n static v8::Handle<v8::Value> PlusOne(const v8::Arguments& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\n実装は前述の myobject.cc
と同様です:\n\n
\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init() {\n Isolate* isolate = Isolate::GetCurrent();\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewSymbol("MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n // Prototype\n tpl->PrototypeTemplate()->Set(String::NewSymbol("plusOne"),\n FunctionTemplate::New(PlusOne)->GetFunction());\n\n constructor = Persistent<Function>::New(isolate, tpl->GetFunction());\n}\n\nHandle<Value> MyObject::New(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n return args.This();\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n return scope.Close(constructor->NewInstance(argc, argv));\n }\n}\n\nHandle<Value> MyObject::NewInstance(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n const unsigned argc = 1;\n Handle<Value> argv[argc] = { args[0] };\n Local<Object> instance = constructor->NewInstance(argc, argv);\n\n return scope.Close(instance);\n}\n\nHandle<Value> MyObject::PlusOne(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());\n obj->value_ += 1;\n\n return scope.Close(Number::New(obj->value_));\n}
\n\n\nこれでテストします:\n\n
\nvar createObject = require('./build/Release/addon');\n\nvar obj = createObject(10);\nconsole.log( obj.plusOne() ); // 11\nconsole.log( obj.plusOne() ); // 12\nconsole.log( obj.plusOne() ); // 13\n\nvar obj2 = createObject(20);\nconsole.log( obj2.plusOne() ); // 21\nconsole.log( obj2.plusOne() ); // 22\nconsole.log( obj2.plusOne() ); // 23
\n",
+ "desc": "\n\nJavaScript の new
演算子で明示的にインスタンス化することなく、\nネイティブオブジェクトを作成できるようにしたい場合に便利です。例:\n\n
\nvar obj = addon.createObject();\n// instead of:\n// var obj = new addon.Object();
\n\n\ncreateObject を
addon.cc` に登録しましょう:\n\n
\n// addon.cc\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nvoid CreateObject(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n MyObject::NewInstance(args);\n}\n\nvoid InitAll(Handle<Object> exports, Handle<Object> module) {\n MyObject::Init();\n\n NODE_SET_METHOD(module, "exports", CreateObject);\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\nmyobject.h
にオブジェクトを生成する static メソッド NewInstance
を\n導入しましょう (すなわち,それが JavaScript 内の new
の働きをします)。\n\n
\n// myobject.h\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n#include <node_object_wrap.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init();\n static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args);\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static void New(const v8::FunctionCallbackInfo<v8::Value>& args);\n static void PlusOne(const v8::FunctionCallbackInfo<v8::Value>& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\n実装は前述の myobject.cc
と同様です:\n\n
\n// myobject.cc\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init() {\n Isolate* isolate = Isolate::GetCurrent();\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewFromUtf8(isolate, "MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n // Prototype\n NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);\n\n constructor.Reset(isolate, tpl->GetFunction());\n}\n\nvoid MyObject::New(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n args.GetReturnValue().Set(args.This());\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n Local<Function> cons = Local<Function>::New(isolate, constructor);\n args.GetReturnValue().Set(cons->NewInstance(argc, argv));\n }\n}\n\nvoid MyObject::NewInstance(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n const unsigned argc = 1;\n Handle<Value> argv[argc] = { args[0] };\n Local<Function> cons = Local<Function>::New(isolate, constructor);\n Local<Object> instance = cons->NewInstance(argc, argv);\n\n args.GetReturnValue().Set(instance);\n}\n\nvoid MyObject::PlusOne(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());\n obj->value_ += 1;\n\n args.GetReturnValue().Set(Number::New(obj->value_));\n}
\n\n\nこれでテストします:\n\n
\n// test.js\nvar createObject = require('./build/Release/addon');\n\nvar obj = createObject(10);\nconsole.log( obj.plusOne() ); // 11\nconsole.log( obj.plusOne() ); // 12\nconsole.log( obj.plusOne() ); // 13\n\nvar obj2 = createObject(20);\nconsole.log( obj2.plusOne() ); // 21\nconsole.log( obj2.plusOne() ); // 22\nconsole.log( obj2.plusOne() ); // 23
\n",
"type": "module",
"displayName": "Factory of wrapped objects"
},
{
"textRaw": "Passing wrapped objects around",
"name": "passing_wrapped_objects_around",
- "desc": "\n\nC++ オブジェクトをラップして返すことに加えて、Node が提供するヘルパ関数\nnode::ObjectWrap::Unwrap
を使用してアンラップすることもできます。\n以下の addon.cc
では、二つの MyObject
オブジェクトを受け取る add()
\n関数を導入します:\n\n
\n#include <node.h>\n#include <node_object_wrap.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nHandle<Value> CreateObject(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n return scope.Close(MyObject::NewInstance(args));\n}\n\nHandle<Value> Add(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj1 = node::ObjectWrap::Unwrap<MyObject>(\n args[0]->ToObject());\n MyObject* obj2 = node::ObjectWrap::Unwrap<MyObject>(\n args[1]->ToObject());\n\n double sum = obj1->Value() + obj2->Value();\n return scope.Close(Number::New(sum));\n}\n\nvoid InitAll(Handle<Object> exports) {\n MyObject::Init();\n\n exports->Set(String::NewSymbol("createObject"),\n FunctionTemplate::New(CreateObject)->GetFunction());\n\n exports->Set(String::NewSymbol("add"),\n FunctionTemplate::New(Add)->GetFunction());\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\nよりおもしろくするために、myobject.h
にパブリックメソッドを導入しましょう。\nしたがって、アンラップされたオブジェクトのプライベート変数を調べることが\nできます。\n\n
\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n#include <node_object_wrap.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init();\n static v8::Handle<v8::Value> NewInstance(const v8::Arguments& args);\n double Value() const { return value_; }\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static v8::Handle<v8::Value> New(const v8::Arguments& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\nmyobject.cc
の実装はこれまでと同様です:\n\n
\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init() {\n Isolate* isolate = Isolate::GetCurrent();\n\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewSymbol("MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n constructor = Persistent<Function>::New(isolate, tpl->GetFunction());\n}\n\nHandle<Value> MyObject::New(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n return args.This();\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n return scope.Close(constructor->NewInstance(argc, argv));\n }\n}\n\nHandle<Value> MyObject::NewInstance(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n const unsigned argc = 1;\n Handle<Value> argv[argc] = { args[0] };\n Local<Object> instance = constructor->NewInstance(argc, argv);\n\n return scope.Close(instance);\n}
\n\n\nこれでテストします:\n\n
\nvar addon = require('./build/Release/addon');\n\nvar obj1 = addon.createObject(10);\nvar obj2 = addon.createObject(20);\nvar result = addon.add(obj1, obj2);\n\nconsole.log(result); // 30
\n",
+ "desc": "\n\nC++ オブジェクトをラップして返すことに加えて、Node が提供するヘルパ関数\nnode::ObjectWrap::Unwrap
を使用してアンラップすることもできます。\n以下の addon.cc
では、二つの MyObject
オブジェクトを受け取る add()
\n関数を導入します:\n\n
\n// addon.cc\n#include <node.h>\n#include <node_object_wrap.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nvoid CreateObject(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n MyObject::NewInstance(args);\n}\n\nvoid Add(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj1 = node::ObjectWrap::Unwrap<MyObject>(\n args[0]->ToObject());\n MyObject* obj2 = node::ObjectWrap::Unwrap<MyObject>(\n args[1]->ToObject());\n\n double sum = obj1->value() + obj2->value();\n args.GetReturnValue().Set(Number::New(sum));\n}\n\nvoid InitAll(Handle<Object> exports) {\n MyObject::Init();\n\n NODE_SET_METHOD(exports, "createObject", CreateObject);\n NODE_SET_METHOD(exports, "add", Add);\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\nよりおもしろくするために、myobject.h
にパブリックメソッドを導入しましょう。\nしたがって、アンラップされたオブジェクトのプライベート変数を調べることが\nできます。\n\n
\n// myobject.h\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n#include <node_object_wrap.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init();\n static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args);\n inline double value() const { return value_; }\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static void New(const v8::FunctionCallbackInfo<v8::Value>& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\nmyobject.cc
の実装はこれまでと同様です:\n\n
\n// myobject.cc\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init() {\n Isolate* isolate = Isolate::GetCurrent();\n\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewFromUtf8(isolate, "MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n constructor.Reset(isolate, tpl->GetFunction());\n}\n\nvoid MyObject::New(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n args.GetReturnValue().Set(args.This());\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n Local<Function> cons = Local<Function>::New(isolate, constructor);\n args.GetReturnValue().Set(cons->NewInstance(argc, argv));\n }\n}\n\nvoid MyObject::NewInstance(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n const unsigned argc = 1;\n Handle<Value> argv[argc] = { args[0] };\n Local<Function> cons = Local<Function>::New(isolate, constructor);\n Local<Object> instance = cons->NewInstance(argc, argv);\n\n args.GetReturnValue().Set(instance);\n}
\n\n\nこれでテストします:\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\nvar obj1 = addon.createObject(10);\nvar obj2 = addon.createObject(20);\nvar result = addon.add(obj1, obj2);\n\nconsole.log(result); // 30
\n",
"type": "module",
"displayName": "Passing wrapped objects around"
}
diff --git a/api/all.html b/api/all.html
index 3638ea4..4c8dc4c 100644
--- a/api/all.html
+++ b/api/all.html
@@ -2,7 +2,7 @@
- About this Documentation Node.js v0.11.10 Manual & Documentation
+ About this Documentation Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -186,8 +186,8 @@
Table of Contents
process.uptime()
process.hrtime()
Async Listeners
-process.createAsyncListener(asyncListener[, callbacksObj[, storageValue]])
-process.addAsyncListener(asyncListener[, callbacksObj[, storageValue]])
+process.createAsyncListener(callbacksObj[, userData])
+process.addAsyncListener(callbacksObj[, userData])
process.addAsyncListener(asyncListener)
process.removeAsyncListener(asyncListener)
@@ -383,6 +383,7 @@ Table of Contents
Crypto
+- crypto.setEngine(engine, [flags])
- crypto.getCiphers()
- crypto.getHashes()
- crypto.createCredentials(details)
@@ -442,8 +443,8 @@ Table of Contents
crypto.getDiffieHellman(group_name)
-crypto.pbkdf2(password, salt, iterations, keylen, callback)
-crypto.pbkdf2Sync(password, salt, iterations, keylen)
+crypto.pbkdf2(password, salt, iterations, keylen, [digest], callback)
+crypto.pbkdf2Sync(password, salt, iterations, keylen, [digest])
crypto.randomBytes(size, [callback])
crypto.pseudoRandomBytes(size, [callback])
Class: Certificate
@@ -459,6 +460,7 @@ Table of Contents
- TLS (SSL)
- Client-initiated renegotiation attack mitigation
- NPN and SNI
+- Perfect Forward Secrecy
- tls.getCiphers()
- tls.createServer(options, [secureConnectionListener])
- tls.connect(options, [callback])
@@ -495,6 +497,7 @@ Table of Contents
- tlsSocket.getPeerCertificate()
- tlsSocket.getCipher()
- tlsSocket.renegotiate(options, callback)
+- tlsSocket.setMaxSendFragment(size)
- tlsSocket.address()
- tlsSocket.remoteAddress
- tlsSocket.remotePort
@@ -876,6 +879,10 @@ Table of Contents
- Example: Tiny CLI
+- readline.cursorTo(stream, x, y)
+- readline.moveCursor(stream, dx, dy)
+- readline.clearLine(stream, dir)
+- readline.clearScreenDown(stream)
REPL
@@ -925,7 +932,7 @@ Table of Contents
child_process.spawn(command, [args], [options])
child_process.exec(command, [options], callback)
-child_process.execFile(file, args, options, callback)
+child_process.execFile(file, [args], [options], [callback])
child_process.fork(modulePath, [args], [options])
@@ -2903,22 +2910,22 @@ Hello worldnode-gyp
@@ -2960,7 +2967,7 @@ Hello world#
@@ -3135,25 +3146,23 @@ Callbacks#addon.cc です:
-#include <node.h>
+// addon.cc
+#include <node.h>
using namespace v8;
-Handle<Value> RunCallback(const Arguments& args) {
+void RunCallback(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
Local<Function> cb = Local<Function>::Cast(args[0]);
const unsigned argc = 1;
- Local<Value> argv[argc] = { String::New("hello world") };
+ Local<Value> argv[argc] = { String::NewFromUtf8(isolate, "hello world") };
cb->Call(Context::GetCurrent()->Global(), argc, argv);
-
- return scope.Close(Undefined(isolate));
}
void Init(Handle<Object> exports, Handle<Object> module) {
- module->Set(String::NewSymbol("exports"),
- FunctionTemplate::New(RunCallback)->GetFunction());
+ NODE_SET_METHOD(module, "exports", RunCallback);
}
NODE_MODULE(addon, Init)
@@ -3177,7 +3186,8 @@ Callbacks#以下の JavaScript コード片でテストすることができます。
-var addon = require('./build/Release/addon');
+// test.js
+var addon = require('./build/Release/addon');
addon(function(msg){
console.log(msg); // 'hello world'
@@ -3194,23 +3204,23 @@ Object factoryaddon.cc
を準備します:
-#include <node.h>
+// addon.cc
+#include <node.h>
#include "myobject.h"
using namespace v8;
@@ -3306,10 +3319,12 @@ Wrapping C++ objects次に、node::ObjectWrap
を継承したラッパーを myobject.h
に作成します。
-#ifndef MYOBJECT_H
+// myobject.h
+#ifndef MYOBJECT_H
#define MYOBJECT_H
#include <node.h>
+#include <node_object_wrap.h>
class MyObject : public node::ObjectWrap {
public:
@@ -3319,8 +3334,8 @@ Wrapping C++ objectsWrapping C++ objectsplusOne
を公開しています:
-#include <node.h>
-#include <node_object_wrap.h>
+// myobject.cc
#include "myobject.h"
using namespace v8;
@@ -3355,20 +3369,18 @@ Wrapping C++ objectsWrapping C++ objects
+
+Windows はシグナルの送信をサポートしていませんが、nodeはprocess.kill()
や
+child_process.kill()
をエミュレートする方法を提供します:
+
+
+
+- シグナル
0
は既存のプロセスを検索するためのものです。
+SIGINT
、SIGTERM
、そして SIGKILL
は、ターゲットのプロセスが無条件に
+終了する原因となります。
+
process.stdout#
プロセスにシグナルを送ります。
pid
はプロセス ID で signal
は送信されるシグナルを文字列で記述したものです。
シグナルの名前は 'SIGINT'
や 'SIGHUP'
のような文字列です。
省略すると、シグナルは 'SIGTERM'
となります。
-詳細は kill(2) を参照してください。
+詳細は Signal Events および
+kill(2) を参照してください。
AsyncListener
API は、開発者が非同期イベントの有効期間中に
@@ -4944,23 +4984,17 @@
Async Listeners#
+process.createAsyncListener(callbacksObj[, userData])#
-asyncListener
{Function} 非同期イベントが生成されると呼び出される
-コールバック。
-callbacksObj
{Object} 非同期イベントの有効期間中に、指定された回数だけ
-呼び出されるオプションのコールバック。
-storageValue
{Value} asyncListener
とそれに続くコールバックが
-実行される時、最初の引数として渡される値。
+callbacksObj
{Object} 非同期イベントのライフサイクル中に、
+指定された回数だけ呼び出されるオプションのコールバックを含むオブジェクト。
+userData
{Value} 全てのコールバックに渡される値。
非同期イベントを捉えるには、process.addAsyncListener()
に
-このオブジェクトを渡してください。
+callbacksObj
か既存の AsyncListener
インスタンスのいずれかを渡してください。
同じ AsyncListener
インスタンスは一度だけアクティブなキューに加えられます。
それ以降、インスタンスの追加を試みても無視されます。
-イベントの捕捉を止めるには、このオブジェクトを
+
イベントの捕捉を止めるには、AsyncListener
インスタンスを
process.removeAsyncListener()
に渡してください。
それは以前に加えられた AsyncListener
がコールバックされなくなることを
意味 しません。
@@ -5003,95 +5038,98 @@
process.createAsyncListener(asyncListener[, callbacksObj[, storageValue]])関数のパラメータの説明:
+
+
+
+
+
callbacksObj
: オプションのフィールドを3つ持つことができる Object
です。
+
-asyncListener(storageValue)
: 非同期イベントが生成された時に呼び出される関数。
+
+create(userData)
: 非同期イベントが生成された時に呼び出される関数。
関数がもし Value
を返すなら、それはイベントに割り当てられ、
process.createAsyncListener()
の storageValue
引数に渡された値を
上書きします。
作成時に storageValue
の初期値が渡されていた場合、asyncListener()
は
-関数の引数としてそれを受け取ります。
-
-
-
-
-callbacksObj
: オプションのフィールドを3つ持つことができる Object
です。
-
-
+関数の引数としてそれを受け取ります。
+
-before(context, storageValue)
: 非同期コールバックが実行される前に
+before(context, userData)
: 非同期コールバックが実行される前に
呼び出される関数です。
それは呼び出される関数の context
(すなわち this
) と、
asyncListener
の戻り値または構築時に渡された値 (両方の場合) のどちらかが
storageValue
として渡されます。
-after(context, storageValue)
: 非同期イベントのコールバックが実行された後で
+after(context, userData)
: 非同期イベントのコールバックが実行された後で
呼び出される関数です。
コールバックがエラーをスローしてそれが処理されなければ、
これは呼び出されないことに注意してください。
-error(storageValue, error)
: イベントのコールバックがスローすると
+error(userData, error)
: イベントのコールバックがスローすると
呼び出されます。
-もし error()
が true
を返すと、Node はエラーが正しく処理されたと見なし、
+もし登録された関数が true
を返すと、Node はエラーが正しく処理されたと見なし、
正常に実行を再開します。
複数の error()
が登録されている場合、エラーが処理されたと AsyncListener
に
-認められるには、一つ だけでもコールバックが true
を返す必要があります。
+認められるには、一つ だけでもコールバックが true
を返す必要がありますが、
+全ての error()
コールバックは常に実行されます。
-storageValue
: デフォルトで、新しいイベントのインスタンスに割り当てられる値
-(つまり何でも)。asyncListener()
が返す値によって上書きされるかもしれません。
+userData
: デフォルトで、新しいイベントのインスタンスに割り当てられる値
+(つまり何でも)。create()
が返す値によって上書きされるかもしれません。
-storageValue
が上書きされる例です:
+
userData
が上書きされる例です:
-process.createAsyncListener(function listener(value) {
- // value === true
- return false;
+process.createAsyncListener({
+ create: function listener(value) {
+ // value === true
+ return false;
}, {
before: function before(context, value) {
// value === false
@@ -5099,19 +5137,19 @@ process.createAsyncListener(asyncListener[, callbacksObj[, storageValue]])
注意: EventEmitter は、非同期イベントを生成するために使われますが、
それ自身は非同期ではありません。
-そのため、イベントが加えられても asyncListener()
は呼び出されず、
+そのため、イベントが加えられても create()
は呼び出されず、
コールバックが呼び出されても before
/after
は呼び出されません。
-process.addAsyncListener(asyncListener[, callbacksObj[, storageValue]])#
+process.addAsyncListener(callbacksObj[, userData])#
process.addAsyncListener(asyncListener)#
-キューから AsyncLister
を削除することは、その実行スコープの間で
-呼ばれる非同期イベントによるコールバック呼び出しの中止を意味しません。
+
アクティブなキューから AsyncLister
を削除することは、
+登録されたイベントに対して asyncListener
コールバックの
+呼び出しが中断されることを意味 しません。
+その後、コールバックが実行される間に生成される全てのイベントも、
+将来の実行のために同じ asyncListener
に割り当てられます。
-var key = process.createAsyncListener(function asyncListener() {
- // To log we must stop listening or we'll enter infinite recursion.
- process.removeAsyncListener(key);
- console.log('You summoned me?');
- process.addAsyncListener(key);
+var fs = require('fs');
+
+var key = process.createAsyncListener({
+ create: function asyncListener() {
+ // Write directly to stdout or we'll enter a recursive loop
+ fs.writeSync(1, 'You summoned me?\n');
+ }
});
// We want to begin capturing async events some time in the future.
@@ -5247,11 +5287,13 @@ process.removeAsyncListener(asyncListener)#<
+crypto.setEngine(engine, [flags])#
+
+
+
一部または全ての OpenSSL 関数のために、エンジンをロードまたは設定します
+(フラグによって選択されます)。
+
+
+
+
+engine
は id か、エンジンの共有ライブラリへのパスかのいずれかです。
+
+
+
+
+flags
はオプションで、デフォルトは ENGINE_METHOD_ALL
です。
+以下のフラグから一つまたは組み合わせを指定することが出来ます
+(constants
モジュールに定義されています)。
+
+
+
+ENGINE_METHOD_RSA
+ENGINE_METHOD_DSA
+ENGINE_METHOD_DH
+ENGINE_METHOD_RAND
+ENGINE_METHOD_ECDH
+ENGINE_METHOD_ECDSA
+ENGINE_METHOD_CIPHERS
+ENGINE_METHOD_DIGESTS
+ENGINE_METHOD_STORE
+ENGINE_METHOD_PKEY_METH
+ENGINE_METHOD_PKEY_ASN1_METH
+ENGINE_METHOD_ALL
+ENGINE_METHOD_NONE
+
crypto.getCiphers()#
+
+非同期の PBKDF2 関数です。
+選択された HMAC ダイジェスト関数 (デフォルト: SHA1) を適用して、
+要求されたパスワード、salt、および繰り返しの数から、
+指定された長さの鍵を生成します。
+コールバック関数は二つの引数を受け取ります: (err, derivedKey)
+
+
-疑似乱数を HMAC-SHA1 関数に適用して、与えられたパスワードと salt
-(ランダムなバイト値)、および繰り返しから、指定された長さの鍵を生成する、
-非同期の PBKDF2 です。
-コールバック関数は二つの引数を受け取る (err, derivedKey)
です。
+
例:
-crypto.pbkdf2Sync(password, salt, iterations, keylen)#
+crypto.pbkdf2('secret', 'salt', 4096, 512, 'sha256', function(err, key) {
+ if (err)
+ throw err;
+ console.log(key.toString('hex')); // 'c5e478d...1469e50'
+});
+
+
+crypto.getHashes() からサポートされる
+ダイジェスト関数の一覧を得ることが出来ます。
+
+
+crypto.pbkdf2Sync(password, salt, iterations, keylen, [digest])#
@@ -12133,6 +12239,65 @@ NPN and SNI#
+
+
+
+
+用語 "Forward Secrecy" あるいは "Perfect Forward Secrecy" とは、
+鍵を合意 (すなわち鍵交換) する方法の特徴を説明します。
+実際のところ、それは (あなたの) サーバの秘密鍵が漏洩しても、
+盗聴者によって解読される通信は、特定の各セッション毎に生成される
+鍵のペアを取得したものに限られることを意味します。
+
+
+
+
+これは、ハンドシェークの度にランダムに生成される鍵のペアによって
+鍵合意することで達成されます (全てのセッションで同じ鍵を使うのとは対照的です)。
+Perfect Forward Secrecy を提供するこの方法の実装は、
+「一時的 (ephemeral)」と呼ばれます。
+
+
+
+
+現在の所、Perfect Forward Secrecyとして2つの方法が一般的に使われています
+(従来の省略形に文字 "E" が負荷されていることに注意してください):
+
+
+
+
+
+
+
+鍵の生成は高価な処理であるため、「一時的」な方法はパフォーマンスの面で
+不利かもしれません。
+
+
+
tls.getCiphers()#
+
+最大の TLS フラグメントサイズを設定します (デフォルトおよび最大の値は 16384
、
+最少は 512
)。
+成功すれば true
、そうでなければ false
を返します。
+
+
+
+
+小さなフラグメントサイズは、クライアントでのバッファリングの遅延を減少します:
+大きなフラグメントは、全てのフラグメントが受信されてその完全性が確かめられるまで
+TLS 層によってバッファリングされます;
+大きなフラグメントは複数のラウンドトリップに分割され、
+パケットの喪失や並べ替えにより遅延が発生することがあります。
+しかしながら、小さなフラグメントは余分な TLS フレームのバイトと
+CPU のオーバーヘッドを加えるため、全体としてサーバのスループットを
+低下させるでしょう。
+
tlsSocket.address()#
StringDecoder#
@@ -20258,7 +20461,7 @@ readline.createInterface(options)#
+
+
+カーソルを与えられた TTY スクリーンの指定の位置に移動します。
+
+
+readline.moveCursor(stream, dx, dy)#
+
+
+カーソルを与えられた TTY スクリーンの現在の位置からの相対位置に移動します。
+
+
+readline.clearLine(stream, dir)#
+
+
+与えられた TTY スクリーンの現在の行を指定された方向に消去します。
+dir
は以下の値のいずれか:
+
+
+
+
+
+-1
- カーソルから左方向
+1
- カーソルから右方向
+0
- 行全体
+
+readline.clearScreenDown(stream)#
+
+
+スクリーンのカーソルより下を消去します。
+
+
REPL#
Stability: 3 - Stable
-ls -lh /usr を実行して
stdout、
stderr`、および終了コードを取得する例:
+
ls -lh /usr
を実行して stdout
、stderr
、および終了コードを取得する例:
var spawn = require('child_process').spawn,
@@ -22355,7 +22603,9 @@ child_process.spawn(command, [args], [options])#
+child_process.execFile(file, [args], [options], [callback])#
@@ -22691,8 +22946,11 @@ child_process.fork(modulePath, [args], [options])execPath
{String} 子プロセスの作成に使われる実行ファイル
execArgv
{Array} 実行ファイルに渡される引数を表す文字列の配列
(デフォルトは process.execArgv
)。
-silent
{Boolean} true
の場合、起動された子プロセスの標準入力と標準出力が
-親プロセスに関連づけられるのを抑止します (デフォルトは false
)。
+silent
{Boolean} true
の場合、子プロセスの標準入力、標準出力、
+標準エラー出力は親プロセスにパイプされます。
+そうでない場合は親プロセスから継承します。
+より詳細は spawn()
の pipe
および inherit
オプションを参照してください
+(デフォルトは false
)。
Return: ChildProcess object
@@ -24491,7 +24749,7 @@ Event: 'fork'@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/all.json b/api/all.json
index 48f220e..c6fe361 100644
--- a/api/all.json
+++ b/api/all.json
@@ -266,7 +266,7 @@
"textRaw": "Signal Events",
"name": "SIGINT, SIGHUP, etc.",
"type": "event",
- "desc": "\n\nプロセスがシグナルを受信した場合に生成されます。\nSIGINT、SIGHUP、その他の POSIX 標準シグナル名の一覧について は sigaction(2) を参照してください。\n\n
\n\n\nSIGINT
を監視する例:\n\n
\n// Start reading from stdin so we don't exit.\nprocess.stdin.resume();\n\nprocess.on('SIGINT', function() {\n console.log('Got SIGINT. Press Control-D to exit.');\n});
\n\n\n多くの端末プログラムで簡単に SIGINT
を送る方法は Control-C
を押すことです。\n\n
\n\n\n注意:\n\n
\n\n\n\nSIGUSR1
は Node.js がデバッガを起動するために予約されています。\nリスナを登録することは出来ますが、デバッガの起動を止めることは出来ません。 \nSIGTERM
および SIGINT
は、Windows 以外のプラットフォームでは\n128
+ シグナル番号で終了する前にターミナルのモードをリセットする\nデフォルトのハンドラを持ちます。\nこれらのシグナルのどちらかにリスナが登録されると、デフォルトの振る舞いは\n削除されます (node は終了しなくなります)。 \nSIGPIPE
はデフォルトでは無視され、リスナを登録することが出来ます。 \nSIGHUP
は Windows ではコンソールウィンドウが閉じられると発生します。\n他のプラットフォームでも同様の条件で発生します。詳細は signal(7)\nを参照してください。\nリスナを登録することは出来ますが、Windows では約 10 秒後に node は無条件に\nWindows によって終了されます。\nWindows 以外のプラットフォームでは、SIGHUP
のデフォルトの振る舞いは\nnodeを終了することですが、リスナを登録するとデフォルトの振る舞いは\n削除されます。 \nSIGTERM
は Windows ではサポートされません。\nしかし、リスナを登録することは可能です。 \nSIGINT
は全てのプラットフォームでサポートされ、通常 CTRL+C
\n(おそらく設定可能でしょう) によって生成されます。\nターミナルが raw モードの場合は生成されません。 \nSIGBREAK
は Windows において CTRL+BREAK
が推された時に送られます。\nWindows 以外のプラットフォームでもリスナを登録することは出来ますが、\nそれを生成したり送信する方法はありません。 \nSIGWINCH
はコンソールのサイズが変更された場合に送られます。\nWindows では、カーソルが移動するか、tty が raw モードの場合に、\nコンソールへ書き込むと発生します。 \nSIGKILL
のリスナを組み込むことは出来ません。\nそれは全てのプラットフォームで node を無条件に終了します。 \nSIGSTOP
のリスナを組み込むことは出来ません。 \n
\n",
+ "desc": "\n\nプロセスがシグナルを受信した場合に生成されます。\nSIGINT、SIGHUP、その他の POSIX 標準シグナル名の一覧について は sigaction(2) を参照してください。\n\n
\n\n\nSIGINT
を監視する例:\n\n
\n// Start reading from stdin so we don't exit.\nprocess.stdin.resume();\n\nprocess.on('SIGINT', function() {\n console.log('Got SIGINT. Press Control-D to exit.');\n});
\n\n\n多くの端末プログラムで簡単に SIGINT
を送る方法は Control-C
を押すことです。\n\n
\n\n\n注意:\n\n
\n\n\n\nSIGUSR1
は Node.js がデバッガを起動するために予約されています。\nリスナを登録することは出来ますが、デバッガの起動を止めることは出来ません。 \nSIGTERM
および SIGINT
は、Windows 以外のプラットフォームでは\n128
+ シグナル番号で終了する前にターミナルのモードをリセットする\nデフォルトのハンドラを持ちます。\nこれらのシグナルのどちらかにリスナが登録されると、デフォルトの振る舞いは\n削除されます (node は終了しなくなります)。 \nSIGPIPE
はデフォルトでは無視され、リスナを登録することが出来ます。 \nSIGHUP
は Windows ではコンソールウィンドウが閉じられると発生します。\n他のプラットフォームでも同様の条件で発生します。詳細は signal(7)\nを参照してください。\nリスナを登録することは出来ますが、Windows では約 10 秒後に node は無条件に\nWindows によって終了されます。\nWindows 以外のプラットフォームでは、SIGHUP
のデフォルトの振る舞いは\nnodeを終了することですが、リスナを登録するとデフォルトの振る舞いは\n削除されます。 \nSIGTERM
は Windows ではサポートされません。\nしかし、リスナを登録することは可能です。 \n- 端末からの
SIGINT
は全てのプラットフォームでサポートされ、通常 CTRL+C
\n(おそらく設定可能でしょう) によって生成されます。\nターミナルが raw モードの場合は生成されません。 \nSIGBREAK
は Windows において CTRL+BREAK
が推された時に送られます。\nWindows 以外のプラットフォームでもリスナを登録することは出来ますが、\nそれを生成したり送信する方法はありません。 \nSIGWINCH
はコンソールのサイズが変更された場合に送られます。\nWindows では、カーソルが移動するか、tty が raw モードの場合に、\nコンソールへ書き込むと発生します。 \nSIGKILL
のリスナを組み込むことは出来ません。\nそれは全てのプラットフォームで node を無条件に終了します。 \nSIGSTOP
のリスナを組み込むことは出来ません。 \n
\n\n\nWindows はシグナルの送信をサポートしていませんが、nodeはprocess.kill()
や\nchild_process.kill()
をエミュレートする方法を提供します:\n\n
\n\n- シグナル
0
は既存のプロセスを検索するためのものです。 \nSIGINT
、SIGTERM
、そして SIGKILL
は、ターゲットのプロセスが無条件に\n終了する原因となります。 \n
\n",
"params": []
}
],
@@ -501,7 +501,7 @@
"textRaw": "process.kill(pid, [signal])",
"type": "method",
"name": "kill",
- "desc": "\n\nプロセスにシグナルを送ります。\npid
はプロセス ID で signal
は送信されるシグナルを文字列で記述したものです。\nシグナルの名前は 'SIGINT'
や 'SIGHUP'
のような文字列です。\n省略すると、シグナルは 'SIGTERM'
となります。\n詳細は kill(2) を参照してください。\n\n
\n\n\n対象が存在しない場合はエラーがスローされます。\n特殊なケースとして、プロセスが存在することを確認するためにシグナル\n0
を使うことが出来ます。\n\n
\n\n\nこの関数の名前が process.kill
であるとおり、これは kill
\nシステムコールのように単にシグナルを送信することに注意してください。\n対象のプロセスを殺すためだけでなく、他のシグナルも送信できます。\n\n
\n\n\n自身にシグナルを送信する例:\n\n
\nprocess.on('SIGHUP', function() {\n console.log('Got SIGHUP signal.');\n});\n\nsetTimeout(function() {\n console.log('Exiting.');\n process.exit(0);\n}, 100);\n\nprocess.kill(process.pid, 'SIGHUP');
\n\n\n注意: SIGUSR1 が Node.js によって受け取られると、それはデバッガを起動します。\nSignal Events を参照してください。\n\n
\n",
+ "desc": "\n\nプロセスにシグナルを送ります。\npid
はプロセス ID で signal
は送信されるシグナルを文字列で記述したものです。\nシグナルの名前は 'SIGINT'
や 'SIGHUP'
のような文字列です。\n省略すると、シグナルは 'SIGTERM'
となります。\n詳細は Signal Events および\nkill(2) を参照してください。\n\n
\n\n\n対象が存在しない場合はエラーがスローされます。\n特殊なケースとして、プロセスが存在することを確認するためにシグナル\n0
を使うことが出来ます。\n\n
\n\n\nこの関数の名前が process.kill
であるとおり、これは kill
\nシステムコールのように単にシグナルを送信することに注意してください。\n対象のプロセスを殺すためだけでなく、他のシグナルも送信できます。\n\n
\n\n\n自身にシグナルを送信する例:\n\n
\nprocess.on('SIGHUP', function() {\n console.log('Got SIGHUP signal.');\n});\n\nsetTimeout(function() {\n console.log('Exiting.');\n process.exit(0);\n}, 100);\n\nprocess.kill(process.pid, 'SIGHUP');
\n\n\n注意: SIGUSR1 が Node.js によって受け取られると、それはデバッガを起動します。\nSignal Events を参照してください。\n\n
\n",
"signatures": [
{
"params": [
@@ -590,31 +590,28 @@
]
},
{
- "textRaw": "process.createAsyncListener(asyncListener[, callbacksObj[, storageValue]])",
+ "textRaw": "process.createAsyncListener(callbacksObj[, userData])",
"type": "method",
"name": "createAsyncListener",
- "desc": "\n\n\nasyncListener
{Function} 非同期イベントが生成されると呼び出される\nコールバック。 \ncallbacksObj
{Object} 非同期イベントの有効期間中に、指定された回数だけ\n呼び出されるオプションのコールバック。 \nstorageValue
{Value} asyncListener
とそれに続くコールバックが\n実行される時、最初の引数として渡される値。 \n
\n\n\n構築された AsyncListener
オブジェクトを返します。\n\n
\n\n\n非同期イベントを捉えるには、[process.addAsyncListener()
][] に\nこのオブジェクトを渡してください。\n同じ AsyncListener
インスタンスは一度だけアクティブなキューに加えられます。\nそれ以降、インスタンスの追加を試みても無視されます。\n\n
\n\n\nイベントの捕捉を止めるには、このオブジェクトを\n[process.removeAsyncListener()
][] に渡してください。\nそれは以前に加えられた AsyncListener
がコールバックされなくなることを\n意味 しません。\n一度非同期イベントに加えられると、それは非同期処理のコールスタックが有効な間、\n持続します。\n\n
\n\n\n関数のパラメータの説明:\n\n
\n\n\nasyncListener(storageValue)
: 非同期イベントが生成された時に呼び出される関数。\n関数がもし Value
を返すなら、それはイベントに割り当てられ、\nprocess.createAsyncListener()
の storageValue
引数に渡された値を\n上書きします。\n作成時に storageValue
の初期値が渡されていた場合、asyncListener()
は\n関数の引数としてそれを受け取ります。\n\n
\n\n\ncallbacksObj
: オプションのフィールドを3つ持つことができる Object
です。\n\n
\n\n\n\nbefore(context, storageValue)
: 非同期コールバックが実行される前に\n呼び出される関数です。\nそれは呼び出される関数の context
(すなわち this
) と、\nasyncListener
の戻り値または構築時に渡された値 (両方の場合) のどちらかが\nstorageValue
として渡されます。 \n
\n\n\n\nafter(context, storageValue)
: 非同期イベントのコールバックが実行された後で\n呼び出される関数です。\nコールバックがエラーをスローしてそれが処理されなければ、\nこれは呼び出されないことに注意してください。 \n
\n\n\n\nerror(storageValue, error)
: イベントのコールバックがスローすると\n呼び出されます。\nもし error()
が true
を返すと、Node はエラーが正しく処理されたと見なし、\n正常に実行を再開します。\n複数の error()
が登録されている場合、エラーが処理されたと AsyncListener
に\n認められるには、一つ だけでもコールバックが true
を返す必要があります。 \n
\n\n\n\nstorageValue
: デフォルトで、新しいイベントのインスタンスに割り当てられる値\n(つまり何でも)。asyncListener()
が返す値によって上書きされるかもしれません。 \n
\n\n\nstorageValue
が上書きされる例です:\n\n
\nprocess.createAsyncListener(function listener(value) {\n // value === true\n return false;\n}, {\n before: function before(context, value) {\n // value === false\n }\n}, true);
\n\n\n注意: [EventEmitter][] は、非同期イベントを生成するために使われますが、\nそれ自身は非同期ではありません。\nそのため、イベントが加えられても asyncListener()
は呼び出されず、\nコールバックが呼び出されても before
/after
は呼び出されません。\n\n\n
\n",
+ "desc": "\n\n\ncallbacksObj
{Object} 非同期イベントのライフサイクル中に、\n指定された回数だけ呼び出されるオプションのコールバックを含むオブジェクト。 \nuserData
{Value} 全てのコールバックに渡される値。 \n
\n\n\n構築された AsyncListener
オブジェクトを返します。\n\n
\n\n\n非同期イベントを捉えるには、[process.addAsyncListener()
][] に\ncallbacksObj
か既存の AsyncListener
インスタンスのいずれかを渡してください。\n同じ AsyncListener
インスタンスは一度だけアクティブなキューに加えられます。\nそれ以降、インスタンスの追加を試みても無視されます。\n\n
\n\n\nイベントの捕捉を止めるには、AsyncListener
インスタンスを\n[process.removeAsyncListener()
][] に渡してください。\nそれは以前に加えられた AsyncListener
がコールバックされなくなることを\n意味 しません。\n一度非同期イベントに加えられると、それは非同期処理のコールスタックが有効な間、\n持続します。\n\n
\n\n\n関数のパラメータの説明:\n\n\n
\n\n\ncallbacksObj
: オプションのフィールドを3つ持つことができる Object
です。\n\n
\n\n\n\ncreate(userData)
: 非同期イベントが生成された時に呼び出される関数。\n関数がもし Value
を返すなら、それはイベントに割り当てられ、\nprocess.createAsyncListener()
の storageValue
引数に渡された値を\n上書きします。\n作成時に storageValue
の初期値が渡されていた場合、asyncListener()
は\n関数の引数としてそれを受け取ります。 \n
\n\n\n\nbefore(context, userData)
: 非同期コールバックが実行される前に\n呼び出される関数です。\nそれは呼び出される関数の context
(すなわち this
) と、\nasyncListener
の戻り値または構築時に渡された値 (両方の場合) のどちらかが\nstorageValue
として渡されます。 \n
\n\n\n\nafter(context, userData)
: 非同期イベントのコールバックが実行された後で\n呼び出される関数です。\nコールバックがエラーをスローしてそれが処理されなければ、\nこれは呼び出されないことに注意してください。 \n
\n\n\n\nerror(userData, error)
: イベントのコールバックがスローすると\n呼び出されます。\nもし登録された関数が true
を返すと、Node はエラーが正しく処理されたと見なし、\n正常に実行を再開します。\n複数の error()
が登録されている場合、エラーが処理されたと AsyncListener
に\n認められるには、一つ だけでもコールバックが true
を返す必要がありますが、\n全ての error()
コールバックは常に実行されます。 \n
\n\n\n\nuserData
: デフォルトで、新しいイベントのインスタンスに割り当てられる値\n(つまり何でも)。create()
が返す値によって上書きされるかもしれません。 \n
\n\n\nuserData
が上書きされる例です:\n\n
\nprocess.createAsyncListener({\n create: function listener(value) {\n // value === true\n return false;\n}, {\n before: function before(context, value) {\n // value === false\n }\n}, true);
\n\n\n注意: [EventEmitter][] は、非同期イベントを生成するために使われますが、\nそれ自身は非同期ではありません。\nそのため、イベントが加えられても create()
は呼び出されず、\nコールバックが呼び出されても before
/after
は呼び出されません。\n\n\n
\n",
"signatures": [
{
"params": [
- {
- "name": "asyncListener["
- },
{
"name": "callbacksObj["
},
{
- "name": "storageValue"
+ "name": "userData"
}
]
}
]
},
{
- "textRaw": "process.addAsyncListener(asyncListener[, callbacksObj[, storageValue]])",
+ "textRaw": "process.addAsyncListener(callbacksObj[, userData])",
"type": "method",
"name": "addAsyncListener",
- "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar cntr = 0;\nvar key = process.addAsyncListener(function() {\n return { uid: cntr++ };\n}, {\n before: function onBefore(context, storage) {\n // Need to remove the listener while logging or will end up\n // with an infinite call loop.\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n after: function onAfter(context, storage) {\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'really, it\\'s ok') {\n process.removeAsyncListener(key);\n console.log('handled error just threw:');\n console.log(err.stack);\n process.addAsyncListener(key);\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('really, it\\'s ok');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
+ "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar fs = require('fs');\n\nvar cntr = 0;\nvar key = process.addAsyncListener({\n create: function onCreate() {\n return { uid: cntr++ };\n },\n before: function onBefore(context, storage) {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n after: function onAfter(context, storage) {\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'everything is fine') {\n fs.writeSync(1, 'handled error just threw:\\n');\n fs.writeSync(1, err.stack + '\\n');\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('everything is fine');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
"signatures": [
{
"params": [
@@ -625,14 +622,11 @@
},
{
"params": [
- {
- "name": "asyncListener["
- },
{
"name": "callbacksObj["
},
{
- "name": "storageValue"
+ "name": "userData"
}
]
}
@@ -642,7 +636,7 @@
"textRaw": "process.addAsyncListener(asyncListener)",
"type": "method",
"name": "addAsyncListener",
- "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar cntr = 0;\nvar key = process.addAsyncListener(function() {\n return { uid: cntr++ };\n}, {\n before: function onBefore(context, storage) {\n // Need to remove the listener while logging or will end up\n // with an infinite call loop.\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n after: function onAfter(context, storage) {\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'really, it\\'s ok') {\n process.removeAsyncListener(key);\n console.log('handled error just threw:');\n console.log(err.stack);\n process.addAsyncListener(key);\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('really, it\\'s ok');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
+ "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar fs = require('fs');\n\nvar cntr = 0;\nvar key = process.addAsyncListener({\n create: function onCreate() {\n return { uid: cntr++ };\n },\n before: function onBefore(context, storage) {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n after: function onAfter(context, storage) {\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'everything is fine') {\n fs.writeSync(1, 'handled error just threw:\\n');\n fs.writeSync(1, err.stack + '\\n');\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('everything is fine');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
"signatures": [
{
"params": [
@@ -657,7 +651,7 @@
"textRaw": "process.removeAsyncListener(asyncListener)",
"type": "method",
"name": "removeAsyncListener",
- "desc": "\n\nAsyncListener
を監視キューから削除します。\n\n
\n\n\nキューから AsyncLister
を削除することは、その実行スコープの間で\n呼ばれる非同期イベントによるコールバック呼び出しの中止を意味しません。\n\n
\nvar key = process.createAsyncListener(function asyncListener() {\n // To log we must stop listening or we'll enter infinite recursion.\n process.removeAsyncListener(key);\n console.log('You summoned me?');\n process.addAsyncListener(key);\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setTimeout(function() {\n setImmediate(function() {\n process.nextTick(function() { });\n });\n });\n\n // Removing the listener doesn't mean to stop capturing events that\n // have already been added.\n process.removeAsyncListener(key);\n}, 100);\n\n// Output:\n// You summoned me?\n// You summoned me?\n// You summoned me?\n// You summoned me?
\n\n\n4つの非同期イベントを記録したという事実は、Node の [Timers][] 実装の詳細を\n表しています。\n\n
\n\n\n非同期イベントの捕捉を特定のスタック上で止めたければ、\nprocess.removeAsyncListener()
はそのコールスタック自身で呼び出すべきです。\nたとえば:\n\n
\nvar key = process.createAsyncListener(function asyncListener() {\n // To log we must stop listening or we'll enter infinite recursion.\n process.removeAsyncListener(key);\n console.log('You summoned me?');\n process.addAsyncListener(key);\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setImmediate(function() {\n // Stop capturing from this call stack.\n process.removeAsyncListener(key);\n\n process.nextTick(function() { });\n });\n}, 100);\n\n// Output:\n// You summoned me?
\n\n\nユーザは削除したい AsyncListener
をいつでも明示的に渡すべきです。\nすべてのリスナを一度に削除することは出来ません。\n\n\n
\n",
+ "desc": "\n\nAsyncListener
を監視キューから削除します。\n\n
\n\n\nアクティブなキューから AsyncLister
を削除することは、\n登録されたイベントに対して asyncListener
コールバックの\n呼び出しが中断されることを意味 しません。\nその後、コールバックが実行される間に生成される全てのイベントも、\n将来の実行のために同じ asyncListener
に割り当てられます。\n\n
\nvar fs = require('fs');\n\nvar key = process.createAsyncListener({\n create: function asyncListener() {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'You summoned me?\\n');\n }\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setTimeout(function() {\n setImmediate(function() {\n process.nextTick(function() { });\n });\n });\n\n // Removing the listener doesn't mean to stop capturing events that\n // have already been added.\n process.removeAsyncListener(key);\n}, 100);\n\n// Output:\n// You summoned me?\n// You summoned me?\n// You summoned me?\n// You summoned me?
\n\n\n4つの非同期イベントを記録したという事実は、Node の [Timers][] 実装の詳細を\n表しています。\n\n
\n\n\n非同期イベントの捕捉を特定のスタック上で止めたければ、\nprocess.removeAsyncListener()
はそのコールスタック自身で呼び出すべきです。\nたとえば:\n\n
\nvar fs = require('fs');\n\nvar key = process.createAsyncListener({\n create: function asyncListener() {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'You summoned me?\\n');\n }\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setImmediate(function() {\n // Stop capturing from this call stack.\n process.removeAsyncListener(key);\n\n process.nextTick(function() { });\n });\n}, 100);\n\n// Output:\n// You summoned me?
\n\n\nユーザは削除したい AsyncListener
をいつでも明示的に渡すべきです。\nすべてのリスナを一度に削除することは出来ません。\n\n\n
\n",
"signatures": [
{
"params": [
@@ -678,7 +672,7 @@
"type": "misc",
"stability": 1,
"stabilityText": "Experimental",
- "desc": "\n\nAsyncListener
API は、開発者が非同期イベントの有効期間中に\nキーとなるイベントの通知を受け取ることを可能にする、\nAsyncWrap
クラスへの JavaScript インターフェースです。\nNode は内部的に多くの非同期イベントを扱うため、この API を使用することは\nアプリケーションのパフォーマンスに 重大な影響 を与えます。\n\n\n
\n"
+ "desc": "\n\nAsyncListener
API は、開発者が非同期イベントの有効期間中に\nキーとなるイベントの通知を受け取ることを可能にする、\nAsyncWrap
クラスへの JavaScript インターフェースです。\nNode は内部的に多くの非同期イベントを扱うため、この API を使用することは\nアプリケーションのパフォーマンスに 重大な影響 を与えます。\n\n\n
\n"
}
]
}
@@ -1097,7 +1091,7 @@
"textRaw": "Signal Events",
"name": "SIGINT, SIGHUP, etc.",
"type": "event",
- "desc": "\n\nプロセスがシグナルを受信した場合に生成されます。\nSIGINT、SIGHUP、その他の POSIX 標準シグナル名の一覧について は sigaction(2) を参照してください。\n\n
\n\n\nSIGINT
を監視する例:\n\n
\n// Start reading from stdin so we don't exit.\nprocess.stdin.resume();\n\nprocess.on('SIGINT', function() {\n console.log('Got SIGINT. Press Control-D to exit.');\n});
\n\n\n多くの端末プログラムで簡単に SIGINT
を送る方法は Control-C
を押すことです。\n\n
\n\n\n注意:\n\n
\n\n\n\nSIGUSR1
は Node.js がデバッガを起動するために予約されています。\nリスナを登録することは出来ますが、デバッガの起動を止めることは出来ません。 \nSIGTERM
および SIGINT
は、Windows 以外のプラットフォームでは\n128
+ シグナル番号で終了する前にターミナルのモードをリセットする\nデフォルトのハンドラを持ちます。\nこれらのシグナルのどちらかにリスナが登録されると、デフォルトの振る舞いは\n削除されます (node は終了しなくなります)。 \nSIGPIPE
はデフォルトでは無視され、リスナを登録することが出来ます。 \nSIGHUP
は Windows ではコンソールウィンドウが閉じられると発生します。\n他のプラットフォームでも同様の条件で発生します。詳細は signal(7)\nを参照してください。\nリスナを登録することは出来ますが、Windows では約 10 秒後に node は無条件に\nWindows によって終了されます。\nWindows 以外のプラットフォームでは、SIGHUP
のデフォルトの振る舞いは\nnodeを終了することですが、リスナを登録するとデフォルトの振る舞いは\n削除されます。 \nSIGTERM
は Windows ではサポートされません。\nしかし、リスナを登録することは可能です。 \nSIGINT
は全てのプラットフォームでサポートされ、通常 CTRL+C
\n(おそらく設定可能でしょう) によって生成されます。\nターミナルが raw モードの場合は生成されません。 \nSIGBREAK
は Windows において CTRL+BREAK
が推された時に送られます。\nWindows 以外のプラットフォームでもリスナを登録することは出来ますが、\nそれを生成したり送信する方法はありません。 \nSIGWINCH
はコンソールのサイズが変更された場合に送られます。\nWindows では、カーソルが移動するか、tty が raw モードの場合に、\nコンソールへ書き込むと発生します。 \nSIGKILL
のリスナを組み込むことは出来ません。\nそれは全てのプラットフォームで node を無条件に終了します。 \nSIGSTOP
のリスナを組み込むことは出来ません。 \n
\n",
+ "desc": "\n\nプロセスがシグナルを受信した場合に生成されます。\nSIGINT、SIGHUP、その他の POSIX 標準シグナル名の一覧について は sigaction(2) を参照してください。\n\n
\n\n\nSIGINT
を監視する例:\n\n
\n// Start reading from stdin so we don't exit.\nprocess.stdin.resume();\n\nprocess.on('SIGINT', function() {\n console.log('Got SIGINT. Press Control-D to exit.');\n});
\n\n\n多くの端末プログラムで簡単に SIGINT
を送る方法は Control-C
を押すことです。\n\n
\n\n\n注意:\n\n
\n\n\n\nSIGUSR1
は Node.js がデバッガを起動するために予約されています。\nリスナを登録することは出来ますが、デバッガの起動を止めることは出来ません。 \nSIGTERM
および SIGINT
は、Windows 以外のプラットフォームでは\n128
+ シグナル番号で終了する前にターミナルのモードをリセットする\nデフォルトのハンドラを持ちます。\nこれらのシグナルのどちらかにリスナが登録されると、デフォルトの振る舞いは\n削除されます (node は終了しなくなります)。 \nSIGPIPE
はデフォルトでは無視され、リスナを登録することが出来ます。 \nSIGHUP
は Windows ではコンソールウィンドウが閉じられると発生します。\n他のプラットフォームでも同様の条件で発生します。詳細は signal(7)\nを参照してください。\nリスナを登録することは出来ますが、Windows では約 10 秒後に node は無条件に\nWindows によって終了されます。\nWindows 以外のプラットフォームでは、SIGHUP
のデフォルトの振る舞いは\nnodeを終了することですが、リスナを登録するとデフォルトの振る舞いは\n削除されます。 \nSIGTERM
は Windows ではサポートされません。\nしかし、リスナを登録することは可能です。 \n- 端末からの
SIGINT
は全てのプラットフォームでサポートされ、通常 CTRL+C
\n(おそらく設定可能でしょう) によって生成されます。\nターミナルが raw モードの場合は生成されません。 \nSIGBREAK
は Windows において CTRL+BREAK
が推された時に送られます。\nWindows 以外のプラットフォームでもリスナを登録することは出来ますが、\nそれを生成したり送信する方法はありません。 \nSIGWINCH
はコンソールのサイズが変更された場合に送られます。\nWindows では、カーソルが移動するか、tty が raw モードの場合に、\nコンソールへ書き込むと発生します。 \nSIGKILL
のリスナを組み込むことは出来ません。\nそれは全てのプラットフォームで node を無条件に終了します。 \nSIGSTOP
のリスナを組み込むことは出来ません。 \n
\n\n\nWindows はシグナルの送信をサポートしていませんが、nodeはprocess.kill()
や\nchild_process.kill()
をエミュレートする方法を提供します:\n\n
\n\n- シグナル
0
は既存のプロセスを検索するためのものです。 \nSIGINT
、SIGTERM
、そして SIGKILL
は、ターゲットのプロセスが無条件に\n終了する原因となります。 \n
\n",
"params": []
}
],
@@ -1332,7 +1326,7 @@
"textRaw": "process.kill(pid, [signal])",
"type": "method",
"name": "kill",
- "desc": "\n\nプロセスにシグナルを送ります。\npid
はプロセス ID で signal
は送信されるシグナルを文字列で記述したものです。\nシグナルの名前は 'SIGINT'
や 'SIGHUP'
のような文字列です。\n省略すると、シグナルは 'SIGTERM'
となります。\n詳細は kill(2) を参照してください。\n\n
\n\n\n対象が存在しない場合はエラーがスローされます。\n特殊なケースとして、プロセスが存在することを確認するためにシグナル\n0
を使うことが出来ます。\n\n
\n\n\nこの関数の名前が process.kill
であるとおり、これは kill
\nシステムコールのように単にシグナルを送信することに注意してください。\n対象のプロセスを殺すためだけでなく、他のシグナルも送信できます。\n\n
\n\n\n自身にシグナルを送信する例:\n\n
\nprocess.on('SIGHUP', function() {\n console.log('Got SIGHUP signal.');\n});\n\nsetTimeout(function() {\n console.log('Exiting.');\n process.exit(0);\n}, 100);\n\nprocess.kill(process.pid, 'SIGHUP');
\n\n\n注意: SIGUSR1 が Node.js によって受け取られると、それはデバッガを起動します。\nSignal Events を参照してください。\n\n
\n",
+ "desc": "\n\nプロセスにシグナルを送ります。\npid
はプロセス ID で signal
は送信されるシグナルを文字列で記述したものです。\nシグナルの名前は 'SIGINT'
や 'SIGHUP'
のような文字列です。\n省略すると、シグナルは 'SIGTERM'
となります。\n詳細は Signal Events および\nkill(2) を参照してください。\n\n
\n\n\n対象が存在しない場合はエラーがスローされます。\n特殊なケースとして、プロセスが存在することを確認するためにシグナル\n0
を使うことが出来ます。\n\n
\n\n\nこの関数の名前が process.kill
であるとおり、これは kill
\nシステムコールのように単にシグナルを送信することに注意してください。\n対象のプロセスを殺すためだけでなく、他のシグナルも送信できます。\n\n
\n\n\n自身にシグナルを送信する例:\n\n
\nprocess.on('SIGHUP', function() {\n console.log('Got SIGHUP signal.');\n});\n\nsetTimeout(function() {\n console.log('Exiting.');\n process.exit(0);\n}, 100);\n\nprocess.kill(process.pid, 'SIGHUP');
\n\n\n注意: SIGUSR1 が Node.js によって受け取られると、それはデバッガを起動します。\nSignal Events を参照してください。\n\n
\n",
"signatures": [
{
"params": [
@@ -1421,31 +1415,28 @@
]
},
{
- "textRaw": "process.createAsyncListener(asyncListener[, callbacksObj[, storageValue]])",
+ "textRaw": "process.createAsyncListener(callbacksObj[, userData])",
"type": "method",
"name": "createAsyncListener",
- "desc": "\n\n\nasyncListener
{Function} 非同期イベントが生成されると呼び出される\nコールバック。 \ncallbacksObj
{Object} 非同期イベントの有効期間中に、指定された回数だけ\n呼び出されるオプションのコールバック。 \nstorageValue
{Value} asyncListener
とそれに続くコールバックが\n実行される時、最初の引数として渡される値。 \n
\n\n\n構築された AsyncListener
オブジェクトを返します。\n\n
\n\n\n非同期イベントを捉えるには、[process.addAsyncListener()
][] に\nこのオブジェクトを渡してください。\n同じ AsyncListener
インスタンスは一度だけアクティブなキューに加えられます。\nそれ以降、インスタンスの追加を試みても無視されます。\n\n
\n\n\nイベントの捕捉を止めるには、このオブジェクトを\n[process.removeAsyncListener()
][] に渡してください。\nそれは以前に加えられた AsyncListener
がコールバックされなくなることを\n意味 しません。\n一度非同期イベントに加えられると、それは非同期処理のコールスタックが有効な間、\n持続します。\n\n
\n\n\n関数のパラメータの説明:\n\n
\n\n\nasyncListener(storageValue)
: 非同期イベントが生成された時に呼び出される関数。\n関数がもし Value
を返すなら、それはイベントに割り当てられ、\nprocess.createAsyncListener()
の storageValue
引数に渡された値を\n上書きします。\n作成時に storageValue
の初期値が渡されていた場合、asyncListener()
は\n関数の引数としてそれを受け取ります。\n\n
\n\n\ncallbacksObj
: オプションのフィールドを3つ持つことができる Object
です。\n\n
\n\n\n\nbefore(context, storageValue)
: 非同期コールバックが実行される前に\n呼び出される関数です。\nそれは呼び出される関数の context
(すなわち this
) と、\nasyncListener
の戻り値または構築時に渡された値 (両方の場合) のどちらかが\nstorageValue
として渡されます。 \n
\n\n\n\nafter(context, storageValue)
: 非同期イベントのコールバックが実行された後で\n呼び出される関数です。\nコールバックがエラーをスローしてそれが処理されなければ、\nこれは呼び出されないことに注意してください。 \n
\n\n\n\nerror(storageValue, error)
: イベントのコールバックがスローすると\n呼び出されます。\nもし error()
が true
を返すと、Node はエラーが正しく処理されたと見なし、\n正常に実行を再開します。\n複数の error()
が登録されている場合、エラーが処理されたと AsyncListener
に\n認められるには、一つ だけでもコールバックが true
を返す必要があります。 \n
\n\n\n\nstorageValue
: デフォルトで、新しいイベントのインスタンスに割り当てられる値\n(つまり何でも)。asyncListener()
が返す値によって上書きされるかもしれません。 \n
\n\n\nstorageValue
が上書きされる例です:\n\n
\nprocess.createAsyncListener(function listener(value) {\n // value === true\n return false;\n}, {\n before: function before(context, value) {\n // value === false\n }\n}, true);
\n\n\n注意: [EventEmitter][] は、非同期イベントを生成するために使われますが、\nそれ自身は非同期ではありません。\nそのため、イベントが加えられても asyncListener()
は呼び出されず、\nコールバックが呼び出されても before
/after
は呼び出されません。\n\n\n
\n",
+ "desc": "\n\n\ncallbacksObj
{Object} 非同期イベントのライフサイクル中に、\n指定された回数だけ呼び出されるオプションのコールバックを含むオブジェクト。 \nuserData
{Value} 全てのコールバックに渡される値。 \n
\n\n\n構築された AsyncListener
オブジェクトを返します。\n\n
\n\n\n非同期イベントを捉えるには、[process.addAsyncListener()
][] に\ncallbacksObj
か既存の AsyncListener
インスタンスのいずれかを渡してください。\n同じ AsyncListener
インスタンスは一度だけアクティブなキューに加えられます。\nそれ以降、インスタンスの追加を試みても無視されます。\n\n
\n\n\nイベントの捕捉を止めるには、AsyncListener
インスタンスを\n[process.removeAsyncListener()
][] に渡してください。\nそれは以前に加えられた AsyncListener
がコールバックされなくなることを\n意味 しません。\n一度非同期イベントに加えられると、それは非同期処理のコールスタックが有効な間、\n持続します。\n\n
\n\n\n関数のパラメータの説明:\n\n\n
\n\n\ncallbacksObj
: オプションのフィールドを3つ持つことができる Object
です。\n\n
\n\n\n\ncreate(userData)
: 非同期イベントが生成された時に呼び出される関数。\n関数がもし Value
を返すなら、それはイベントに割り当てられ、\nprocess.createAsyncListener()
の storageValue
引数に渡された値を\n上書きします。\n作成時に storageValue
の初期値が渡されていた場合、asyncListener()
は\n関数の引数としてそれを受け取ります。 \n
\n\n\n\nbefore(context, userData)
: 非同期コールバックが実行される前に\n呼び出される関数です。\nそれは呼び出される関数の context
(すなわち this
) と、\nasyncListener
の戻り値または構築時に渡された値 (両方の場合) のどちらかが\nstorageValue
として渡されます。 \n
\n\n\n\nafter(context, userData)
: 非同期イベントのコールバックが実行された後で\n呼び出される関数です。\nコールバックがエラーをスローしてそれが処理されなければ、\nこれは呼び出されないことに注意してください。 \n
\n\n\n\nerror(userData, error)
: イベントのコールバックがスローすると\n呼び出されます。\nもし登録された関数が true
を返すと、Node はエラーが正しく処理されたと見なし、\n正常に実行を再開します。\n複数の error()
が登録されている場合、エラーが処理されたと AsyncListener
に\n認められるには、一つ だけでもコールバックが true
を返す必要がありますが、\n全ての error()
コールバックは常に実行されます。 \n
\n\n\n\nuserData
: デフォルトで、新しいイベントのインスタンスに割り当てられる値\n(つまり何でも)。create()
が返す値によって上書きされるかもしれません。 \n
\n\n\nuserData
が上書きされる例です:\n\n
\nprocess.createAsyncListener({\n create: function listener(value) {\n // value === true\n return false;\n}, {\n before: function before(context, value) {\n // value === false\n }\n}, true);
\n\n\n注意: [EventEmitter][] は、非同期イベントを生成するために使われますが、\nそれ自身は非同期ではありません。\nそのため、イベントが加えられても create()
は呼び出されず、\nコールバックが呼び出されても before
/after
は呼び出されません。\n\n\n
\n",
"signatures": [
{
"params": [
- {
- "name": "asyncListener["
- },
{
"name": "callbacksObj["
},
{
- "name": "storageValue"
+ "name": "userData"
}
]
}
]
},
{
- "textRaw": "process.addAsyncListener(asyncListener[, callbacksObj[, storageValue]])",
+ "textRaw": "process.addAsyncListener(callbacksObj[, userData])",
"type": "method",
"name": "addAsyncListener",
- "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar cntr = 0;\nvar key = process.addAsyncListener(function() {\n return { uid: cntr++ };\n}, {\n before: function onBefore(context, storage) {\n // Need to remove the listener while logging or will end up\n // with an infinite call loop.\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n after: function onAfter(context, storage) {\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'really, it\\'s ok') {\n process.removeAsyncListener(key);\n console.log('handled error just threw:');\n console.log(err.stack);\n process.addAsyncListener(key);\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('really, it\\'s ok');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
+ "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar fs = require('fs');\n\nvar cntr = 0;\nvar key = process.addAsyncListener({\n create: function onCreate() {\n return { uid: cntr++ };\n },\n before: function onBefore(context, storage) {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n after: function onAfter(context, storage) {\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'everything is fine') {\n fs.writeSync(1, 'handled error just threw:\\n');\n fs.writeSync(1, err.stack + '\\n');\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('everything is fine');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
"signatures": [
{
"params": [
@@ -1456,14 +1447,11 @@
},
{
"params": [
- {
- "name": "asyncListener["
- },
{
"name": "callbacksObj["
},
{
- "name": "storageValue"
+ "name": "userData"
}
]
}
@@ -1473,7 +1461,7 @@
"textRaw": "process.addAsyncListener(asyncListener)",
"type": "method",
"name": "addAsyncListener",
- "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar cntr = 0;\nvar key = process.addAsyncListener(function() {\n return { uid: cntr++ };\n}, {\n before: function onBefore(context, storage) {\n // Need to remove the listener while logging or will end up\n // with an infinite call loop.\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n after: function onAfter(context, storage) {\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'really, it\\'s ok') {\n process.removeAsyncListener(key);\n console.log('handled error just threw:');\n console.log(err.stack);\n process.addAsyncListener(key);\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('really, it\\'s ok');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
+ "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar fs = require('fs');\n\nvar cntr = 0;\nvar key = process.addAsyncListener({\n create: function onCreate() {\n return { uid: cntr++ };\n },\n before: function onBefore(context, storage) {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n after: function onAfter(context, storage) {\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'everything is fine') {\n fs.writeSync(1, 'handled error just threw:\\n');\n fs.writeSync(1, err.stack + '\\n');\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('everything is fine');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
"signatures": [
{
"params": [
@@ -1488,7 +1476,7 @@
"textRaw": "process.removeAsyncListener(asyncListener)",
"type": "method",
"name": "removeAsyncListener",
- "desc": "\n\nAsyncListener
を監視キューから削除します。\n\n
\n\n\nキューから AsyncLister
を削除することは、その実行スコープの間で\n呼ばれる非同期イベントによるコールバック呼び出しの中止を意味しません。\n\n
\nvar key = process.createAsyncListener(function asyncListener() {\n // To log we must stop listening or we'll enter infinite recursion.\n process.removeAsyncListener(key);\n console.log('You summoned me?');\n process.addAsyncListener(key);\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setTimeout(function() {\n setImmediate(function() {\n process.nextTick(function() { });\n });\n });\n\n // Removing the listener doesn't mean to stop capturing events that\n // have already been added.\n process.removeAsyncListener(key);\n}, 100);\n\n// Output:\n// You summoned me?\n// You summoned me?\n// You summoned me?\n// You summoned me?
\n\n\n4つの非同期イベントを記録したという事実は、Node の [Timers][] 実装の詳細を\n表しています。\n\n
\n\n\n非同期イベントの捕捉を特定のスタック上で止めたければ、\nprocess.removeAsyncListener()
はそのコールスタック自身で呼び出すべきです。\nたとえば:\n\n
\nvar key = process.createAsyncListener(function asyncListener() {\n // To log we must stop listening or we'll enter infinite recursion.\n process.removeAsyncListener(key);\n console.log('You summoned me?');\n process.addAsyncListener(key);\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setImmediate(function() {\n // Stop capturing from this call stack.\n process.removeAsyncListener(key);\n\n process.nextTick(function() { });\n });\n}, 100);\n\n// Output:\n// You summoned me?
\n\n\nユーザは削除したい AsyncListener
をいつでも明示的に渡すべきです。\nすべてのリスナを一度に削除することは出来ません。\n\n\n
\n",
+ "desc": "\n\nAsyncListener
を監視キューから削除します。\n\n
\n\n\nアクティブなキューから AsyncLister
を削除することは、\n登録されたイベントに対して asyncListener
コールバックの\n呼び出しが中断されることを意味 しません。\nその後、コールバックが実行される間に生成される全てのイベントも、\n将来の実行のために同じ asyncListener
に割り当てられます。\n\n
\nvar fs = require('fs');\n\nvar key = process.createAsyncListener({\n create: function asyncListener() {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'You summoned me?\\n');\n }\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setTimeout(function() {\n setImmediate(function() {\n process.nextTick(function() { });\n });\n });\n\n // Removing the listener doesn't mean to stop capturing events that\n // have already been added.\n process.removeAsyncListener(key);\n}, 100);\n\n// Output:\n// You summoned me?\n// You summoned me?\n// You summoned me?\n// You summoned me?
\n\n\n4つの非同期イベントを記録したという事実は、Node の [Timers][] 実装の詳細を\n表しています。\n\n
\n\n\n非同期イベントの捕捉を特定のスタック上で止めたければ、\nprocess.removeAsyncListener()
はそのコールスタック自身で呼び出すべきです。\nたとえば:\n\n
\nvar fs = require('fs');\n\nvar key = process.createAsyncListener({\n create: function asyncListener() {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'You summoned me?\\n');\n }\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setImmediate(function() {\n // Stop capturing from this call stack.\n process.removeAsyncListener(key);\n\n process.nextTick(function() { });\n });\n}, 100);\n\n// Output:\n// You summoned me?
\n\n\nユーザは削除したい AsyncListener
をいつでも明示的に渡すべきです。\nすべてのリスナを一度に削除することは出来ません。\n\n\n
\n",
"signatures": [
{
"params": [
@@ -1509,7 +1497,7 @@
"type": "misc",
"stability": 1,
"stabilityText": "Experimental",
- "desc": "\n\nAsyncListener
API は、開発者が非同期イベントの有効期間中に\nキーとなるイベントの通知を受け取ることを可能にする、\nAsyncWrap
クラスへの JavaScript インターフェースです。\nNode は内部的に多くの非同期イベントを扱うため、この API を使用することは\nアプリケーションのパフォーマンスに 重大な影響 を与えます。\n\n\n
\n"
+ "desc": "\n\nAsyncListener
API は、開発者が非同期イベントの有効期間中に\nキーとなるイベントの通知を受け取ることを可能にする、\nAsyncWrap
クラスへの JavaScript インターフェースです。\nNode は内部的に多くの非同期イベントを扱うため、この API を使用することは\nアプリケーションのパフォーマンスに 重大な影響 を与えます。\n\n\n
\n"
}
]
}
@@ -1933,7 +1921,7 @@
{
"textRaw": "Hello world",
"name": "hello_world",
- "desc": "\n\nでは、 以下の JavaScript コードと同じ様に動作する小さなアドオンを\nC++ で作成してみましょう。\n\n
\nmodule.exports.hello = function() { return 'world'; };
\n\n\n最初に hello.cc
というファイルを作成します:\n\n\n
\n#include <node.h>\n\nusing namespace v8;\n\nHandle<Value> Method(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n return scope.Close(String::New("world"));\n}\n\nvoid init(Handle<Object> exports) {\n exports->Set(String::NewSymbol("hello"),\n FunctionTemplate::New(Method)->GetFunction());\n}\n\nNODE_MODULE(hello, init)
\n\n\n全ての Node アドオンは初期化関数をエクスポートしなければならないことに\n注意してください。\n\n
\nvoid Initialize (Handle<Object> exports);\nNODE_MODULE(module_name, Initialize)
\n\n\nNODE_MODULE
は関数ではないので、その後にセミコロンを付けてはいけません\n(node.h
を参照してください)。\n\n
\nmodule_name
は最終的なバイナリのファイル名 (拡張子 .node を除く)\nとマッチする必要があります。\n\n
\nこのソースコードは、hello.node
というバイナリアドオンとしてビルドされる必要が有ります。\nそのために binding.gyp
と呼ばれる、あなたのモジュールをビルドするための\n構成を JSON 的なフォーマットで記述したファイルを作成します。\nこのファイルは node-gyp\nによってコンパイルされます。\n\n
\n{\n "targets": [\n {\n "target_name": "hello",\n "sources": [ "hello.cc" ]\n }\n ]\n}
\n\n\n次のステップは現在のプラットフォームに適したプロジェクトビルドファイルを\n生成することです。\nnode-gyp configure
を使います。\n\n
\n\n\nこれで、Makefile
(Unix プラットフォームの場合)、または vcxproj
ファイル\n(Windows の場合) が build/
ディレクトリに作られます。\n次に node-gyp build
コマンドを起動します。\n\n
\n\n\nこれでコンパイルされた .node
バインディングファイルが作成されます!\nコンパイルされたバインディングファイルは build/Release/
にあります。\n\n
\n\n\nビルドされた hello.node
モジュールを require
で指定することにより、\nこのバイナリアドオンを Node プロジェクトの hello.js
から利用することが\n可能になります。\n\n
\nvar addon = require('./build/Release/hello');\n\nconsole.log(addon.hello()); // 'world'
\n\n\nさらに詳しい情報については下記のパターンか、\n
\nhttps://github.com/arturadib/node-qt を実際のプロダクトにおける\n例として参照してください。\n\n
\n",
+ "desc": "\n\nでは、 以下の JavaScript コードと同じ様に動作する小さなアドオンを\nC++ で作成してみましょう。\n\n
\nmodule.exports.hello = function() { return 'world'; };
\n\n\n最初に hello.cc
というファイルを作成します:\n\n\n
\n// hello.cc\n#include <node.h>\n\nusing namespace v8;\n\nvoid Method(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));\n}\n\nvoid init(Handle<Object> exports) {\n NODE_SET_METHOD(exports, "hello", Method);\n}\n\nNODE_MODULE(addon, init)
\n\n\n全ての Node アドオンは初期化関数をエクスポートしなければならないことに\n注意してください。\n\n
\nvoid Initialize (Handle<Object> exports);\nNODE_MODULE(module_name, Initialize)
\n\n\nNODE_MODULE
は関数ではないので、その後にセミコロンを付けてはいけません\n(node.h
を参照してください)。\n\n
\nmodule_name
は最終的なバイナリのファイル名 (拡張子 .node を除く)\nとマッチする必要があります。\n\n
\nこのソースコードは、addon.node
というバイナリアドオンとしてビルドされる必要が有ります。\nそのために binding.gyp
と呼ばれる、あなたのモジュールをビルドするための\n構成を JSON 的なフォーマットで記述したファイルを作成します。\nこのファイルは node-gyp\nによってコンパイルされます。\n\n
\n{\n "targets": [\n {\n "target_name": "addon",\n "sources": [ "hello.cc" ]\n }\n ]\n}
\n\n\n次のステップは現在のプラットフォームに適したプロジェクトビルドファイルを\n生成することです。\nnode-gyp configure
を使います。\n\n
\n\n\nこれで、Makefile
(Unix プラットフォームの場合)、または vcxproj
ファイル\n(Windows の場合) が build/
ディレクトリに作られます。\n次に node-gyp build
コマンドを起動します。\n\n
\n\n\nこれでコンパイルされた .node
バインディングファイルが作成されます!\nコンパイルされたバインディングファイルは build/Release/
にあります。\n\n
\n\n\nビルドされた hello.node
モジュールを require
で指定することにより、\nこのバイナリアドオンを Node プロジェクトの hello.js
から利用することが\n可能になります。\n\n
\n// hello.js\nvar addon = require('./build/Release/addon');\n\nconsole.log(addon.hello()); // 'world'
\n\n\nさらに詳しい情報については下記のパターンか、\n
\nhttps://github.com/arturadib/node-qt を実際のプロダクトにおける\n例として参照してください。\n\n
\n",
"type": "module",
"displayName": "Hello world"
},
@@ -1945,49 +1933,49 @@
{
"textRaw": "Function arguments",
"name": "function_arguments",
- "desc": "\n\n以下のパターンは JavaScript から呼び出された関数で引数を読み出したり、\n結果を返す方法を示します。これは addon.cc
でのみ必要となります。\n\n
\n#include <node.h>\n\nusing namespace v8;\n\nHandle<Value> Add(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.Length() < 2) {\n ThrowException(Exception::TypeError(\n String::New("Wrong number of arguments")));\n return scope.Close(Undefined(isolate));\n }\n\n if (!args[0]->IsNumber() || !args[1]->IsNumber()) {\n ThrowException(Exception::TypeError(String::New("Wrong arguments")));\n return scope.Close(Undefined(isolate));\n }\n\n Local<Number> num = Number::New(args[0]->NumberValue() +\n args[1]->NumberValue());\n return scope.Close(num);\n}\n\nvoid Init(Handle<Object> exports) {\n exports->Set(String::NewSymbol("add"),\n FunctionTemplate::New(Add)->GetFunction());\n}\n\nNODE_MODULE(addon, Init)
\n\n\n以下の JavaScript コード片でテストすることができます。\n\n
\nvar addon = require('./build/Release/addon');\n\nconsole.log( 'This should be eight:', addon.add(3,5) );
\n",
+ "desc": "\n\n以下のパターンは JavaScript から呼び出された関数で引数を読み出したり、\n結果を返す方法を示します。これは addon.cc
でのみ必要となります。\n\n
\n// addon.cc\n#include <node.h>\n\nusing namespace v8;\n\nvoid Add(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.Length() < 2) {\n isolate->ThrowException(Exception::TypeError(\n String::NewFromUtf8(isolate, "Wrong number of arguments")));\n return;\n }\n\n if (!args[0]->IsNumber() || !args[1]->IsNumber()) {\n isolate->ThrowException(Exception::TypeError(\n String::NewFromUtf8(isolate, "Wrong arguments")));\n return;\n }\n\n Local<Number> num = Number::New(args[0]->NumberValue() +\n args[1]->NumberValue());\n\n args.GetReturnValue().Set(num);\n}\n\nvoid Init(Handle<Object> exports) {\n NODE_SET_METHOD(exports, "add", Add);\n}\n\nNODE_MODULE(addon, Init)
\n\n\n以下の JavaScript コード片でテストすることができます。\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\nconsole.log( 'This should be eight:', addon.add(3,5) );
\n",
"type": "module",
"displayName": "Function arguments"
},
{
"textRaw": "Callbacks",
"name": "callbacks",
- "desc": "\n\nJavaScript の関数を C++ の関数に渡してそこから呼び出すことができます。\nこれは addon.cc
です:\n\n
\n#include <node.h>\n\nusing namespace v8;\n\nHandle<Value> RunCallback(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<Function> cb = Local<Function>::Cast(args[0]);\n const unsigned argc = 1;\n Local<Value> argv[argc] = { String::New("hello world") };\n cb->Call(Context::GetCurrent()->Global(), argc, argv);\n\n return scope.Close(Undefined(isolate));\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n module->Set(String::NewSymbol("exports"),\n FunctionTemplate::New(RunCallback)->GetFunction());\n}\n\nNODE_MODULE(addon, Init)
\n\n\nこの例は二つの引数を取る形式の Init()
を使用して、第2引数で完全な module
\nオブジェクトを受け取っていることに注意してください。\nこれは、exports
のプロパティとして関数を加える代わりに、アドオンが\n一つの関数で exports
を完全に上書きすることを可能にします。\n\n
\n\n\n以下の JavaScript コード片でテストすることができます。\n\n
\nvar addon = require('./build/Release/addon');\n\naddon(function(msg){\n console.log(msg); // 'hello world'\n});
\n",
+ "desc": "\n\nJavaScript の関数を C++ の関数に渡してそこから呼び出すことができます。\nこれは addon.cc
です:\n\n
\n// addon.cc\n#include <node.h>\n\nusing namespace v8;\n\nvoid RunCallback(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<Function> cb = Local<Function>::Cast(args[0]);\n const unsigned argc = 1;\n Local<Value> argv[argc] = { String::NewFromUtf8(isolate, "hello world") };\n cb->Call(Context::GetCurrent()->Global(), argc, argv);\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n NODE_SET_METHOD(module, "exports", RunCallback);\n}\n\nNODE_MODULE(addon, Init)
\n\n\nこの例は二つの引数を取る形式の Init()
を使用して、第2引数で完全な module
\nオブジェクトを受け取っていることに注意してください。\nこれは、exports
のプロパティとして関数を加える代わりに、アドオンが\n一つの関数で exports
を完全に上書きすることを可能にします。\n\n
\n\n\n以下の JavaScript コード片でテストすることができます。\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\naddon(function(msg){\n console.log(msg); // 'hello world'\n});
\n",
"type": "module",
"displayName": "Callbacks"
},
{
"textRaw": "Object factory",
"name": "object_factory",
- "desc": "\n\nC++ 関数の中から新しいオブジェクトを作成して返すことができます。\n以下の addon.cc
のパターンでは、createObject()
に渡された文字列を\n反映する msg
プロパティを持ったオブジェクトを返します。\n\n
\n#include <node.h>\n\nusing namespace v8;\n\nHandle<Value> CreateObject(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<Object> obj = Object::New();\n obj->Set(String::NewSymbol("msg"), args[0]->ToString());\n\n return scope.Close(obj);\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n module->Set(String::NewSymbol("exports"),\n FunctionTemplate::New(CreateObject)->GetFunction());\n}\n\nNODE_MODULE(addon, Init)
\n\n\nテスト用の JavaScript:\n\n
\nvar addon = require('./build/Release/addon');\n\nvar obj1 = addon('hello');\nvar obj2 = addon('world');\nconsole.log(obj1.msg+' '+obj2.msg); // 'hello world'
\n",
+ "desc": "\n\nC++ 関数の中から新しいオブジェクトを作成して返すことができます。\n以下の addon.cc
のパターンでは、createObject()
に渡された文字列を\n反映する msg
プロパティを持ったオブジェクトを返します。\n\n
\n// addon.cc\n#include <node.h>\n\nusing namespace v8;\n\nvoid CreateObject(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<Object> obj = Object::New();\n obj->Set(String::NewFromUtf8(isolate, "msg"), args[0]->ToString());\n\n args.GetReturnValue().Set(obj);\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n NODE_SET_METHOD(module, "exports", CreateObject);\n}\n\nNODE_MODULE(addon, Init)
\n\n\nテスト用の JavaScript:\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\nvar obj1 = addon('hello');\nvar obj2 = addon('world');\nconsole.log(obj1.msg+' '+obj2.msg); // 'hello world'
\n",
"type": "module",
"displayName": "Object factory"
},
{
"textRaw": "Function factory",
"name": "function_factory",
- "desc": "\n\nこのパターンは C++ 関数をラップした JavaScript 関数を作成して返す方法を\n示します。\n\n
\n#include <node.h>\n\nusing namespace v8;\n\nHandle<Value> MyFunction(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n return scope.Close(String::New("hello world"));\n}\n\nHandle<Value> CreateFunction(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<FunctionTemplate> tpl = FunctionTemplate::New(MyFunction);\n Local<Function> fn = tpl->GetFunction();\n\n // omit this to make it anonymous\n fn->SetName(String::NewSymbol("theFunction"));\n\n return scope.Close(fn);\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n module->Set(String::NewSymbol("exports"),\n FunctionTemplate::New(CreateFunction)->GetFunction());\n}\n\nNODE_MODULE(addon, Init)
\n\n\nテスト:\n\n
\nvar addon = require('./build/Release/addon');\n\nvar fn = addon();\nconsole.log(fn()); // 'hello world'
\n",
+ "desc": "\n\nこのパターンは C++ 関数をラップした JavaScript 関数を作成して返す方法を\n示します。\n\n
\n// addon.cc\n#include <node.h>\n\nusing namespace v8;\n\nvoid MyFunction(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n args.GetReturnValue().Set(String::NewFromUtf8(isolate, "hello world"));\n}\n\nvoid CreateFunction(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n Local<FunctionTemplate> tpl = FunctionTemplate::New(MyFunction);\n Local<Function> fn = tpl->GetFunction();\n\n // omit this to make it anonymous\n fn->SetName(String::NewFromUtf8(isolate, "theFunction"));\n\n args.GetReturnValue().Set(fn);\n}\n\nvoid Init(Handle<Object> exports, Handle<Object> module) {\n NODE_SET_METHOD(module, "exports", CreateFunction);\n}\n\nNODE_MODULE(addon, Init)
\n\n\nテスト:\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\nvar fn = addon();\nconsole.log(fn()); // 'hello world'
\n",
"type": "module",
"displayName": "Function factory"
},
{
"textRaw": "Wrapping C++ objects",
"name": "wrapping_c++_objects",
- "desc": "\n\nここでは、\nC++ オブジェクト/クラスをラップし、JavaScript から new 演算子を使って\nインスタンス化できる MyObject
を作成します。\n最初にメインモジュール addon.cc
を準備します:\n\n
\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nvoid InitAll(Handle<Object> exports) {\n MyObject::Init(exports);\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\n次に、node::ObjectWrap
を継承したラッパーを myobject.h
に作成します。\n\n
\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init(v8::Handle<v8::Object> exports);\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static v8::Handle<v8::Value> New(const v8::Arguments& args);\n static v8::Handle<v8::Value> PlusOne(const v8::Arguments& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\n公開したい様々なメソッドを myobject.cc
に実装します。\nここでは、コンストラクタに渡された値に加算する plusOne
を公開しています:\n\n
\n#include <node.h>\n#include <node_object_wrap.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init(Handle<Object> exports) {\n Isolate* isolate = Isolate::GetCurrent();\n\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewSymbol("MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n // Prototype\n tpl->PrototypeTemplate()->Set(String::NewSymbol("plusOne"),\n FunctionTemplate::New(PlusOne)->GetFunction());\n\n Persistent<Function> constructor\n = Persistent<Function>::New(isolate, tpl->GetFunction());\n\n exports->Set(String::NewSymbol("MyObject"), constructor);\n}\n\nHandle<Value> MyObject::New(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n return args.This();\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n return scope.Close(constructor->NewInstance(argc, argv));\n }\n}\n\nHandle<Value> MyObject::PlusOne(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());\n obj->value_ += 1;\n\n return scope.Close(Number::New(obj->value_));\n}
\n\n\nこれでテストします:\n\n
\nvar addon = require('./build/Release/addon');\n\nvar obj = new addon.MyObject(10);\nconsole.log( obj.plusOne() ); // 11\nconsole.log( obj.plusOne() ); // 12\nconsole.log( obj.plusOne() ); // 13
\n",
+ "desc": "\n\nここでは、\nC++ オブジェクト/クラスをラップし、JavaScript から new 演算子を使って\nインスタンス化できる MyObject
を作成します。\n最初にメインモジュール addon.cc
を準備します:\n\n
\n// addon.cc\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nvoid InitAll(Handle<Object> exports) {\n MyObject::Init(exports);\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\n次に、node::ObjectWrap
を継承したラッパーを myobject.h
に作成します。\n\n
\n// myobject.h\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n#include <node_object_wrap.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init(v8::Handle<v8::Object> exports);\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static void New(const v8::FunctionCallbackInfo<v8::Value>& args);\n static void PlusOne(const v8::FunctionCallbackInfo<v8::Value>& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\n公開したい様々なメソッドを myobject.cc
に実装します。\nここでは、コンストラクタに渡された値に加算する plusOne
を公開しています:\n\n
\n// myobject.cc\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init(Handle<Object> exports) {\n Isolate* isolate = Isolate::GetCurrent();\n\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewFromUtf8(isolate, "MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n // Prototype\n NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);\n\n constructor.Reset(isolate, tpl->GetFunction());\n exports->Set(String::NewFromUtf8(isolate, "MyObject"),\n tpl->GetFunction());\n}\n\nvoid MyObject::New(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n args.GetReturnValue().Set(args.This());\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n Local<Function> cons = Local<Function>::New(isolate, constructor);\n args.GetReturnValue().Set(cons->NewInstance(argc, argv));\n }\n}\n\nvoid MyObject::PlusOne(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());\n obj->value_ += 1;\n\n args.GetReturnValue().Set(Number::New(obj->value_));\n}
\n\n\nこれでテストします:\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\nvar obj = new addon.MyObject(10);\nconsole.log( obj.plusOne() ); // 11\nconsole.log( obj.plusOne() ); // 12\nconsole.log( obj.plusOne() ); // 13
\n",
"type": "module",
"displayName": "Wrapping C++ objects"
},
{
"textRaw": "Factory of wrapped objects",
"name": "factory_of_wrapped_objects",
- "desc": "\n\nJavaScript の new
演算子で明示的にインスタンス化することなく、\nネイティブオブジェクトを作成できるようにしたい場合に便利です。例:\n\n
\nvar obj = addon.createObject();\n// instead of:\n// var obj = new addon.Object();
\n\n\ncreateObject を
addon.cc` に登録しましょう:\n\n
\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nHandle<Value> CreateObject(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n return scope.Close(MyObject::NewInstance(args));\n}\n\nvoid InitAll(Handle<Object> exports, Handle<Object> module) {\n MyObject::Init();\n\n module->Set(String::NewSymbol("exports"),\n FunctionTemplate::New(CreateObject)->GetFunction());\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\nmyobject.h
にオブジェクトを生成する static メソッド NewInstance
を\n導入しましょう (すなわち,それが JavaScript 内の new
の働きをします)。\n\n
\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init();\n static v8::Handle<v8::Value> NewInstance(const v8::Arguments& args);\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static v8::Handle<v8::Value> New(const v8::Arguments& args);\n static v8::Handle<v8::Value> PlusOne(const v8::Arguments& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\n実装は前述の myobject.cc
と同様です:\n\n
\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init() {\n Isolate* isolate = Isolate::GetCurrent();\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewSymbol("MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n // Prototype\n tpl->PrototypeTemplate()->Set(String::NewSymbol("plusOne"),\n FunctionTemplate::New(PlusOne)->GetFunction());\n\n constructor = Persistent<Function>::New(isolate, tpl->GetFunction());\n}\n\nHandle<Value> MyObject::New(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n return args.This();\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n return scope.Close(constructor->NewInstance(argc, argv));\n }\n}\n\nHandle<Value> MyObject::NewInstance(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n const unsigned argc = 1;\n Handle<Value> argv[argc] = { args[0] };\n Local<Object> instance = constructor->NewInstance(argc, argv);\n\n return scope.Close(instance);\n}\n\nHandle<Value> MyObject::PlusOne(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());\n obj->value_ += 1;\n\n return scope.Close(Number::New(obj->value_));\n}
\n\n\nこれでテストします:\n\n
\nvar createObject = require('./build/Release/addon');\n\nvar obj = createObject(10);\nconsole.log( obj.plusOne() ); // 11\nconsole.log( obj.plusOne() ); // 12\nconsole.log( obj.plusOne() ); // 13\n\nvar obj2 = createObject(20);\nconsole.log( obj2.plusOne() ); // 21\nconsole.log( obj2.plusOne() ); // 22\nconsole.log( obj2.plusOne() ); // 23
\n",
+ "desc": "\n\nJavaScript の new
演算子で明示的にインスタンス化することなく、\nネイティブオブジェクトを作成できるようにしたい場合に便利です。例:\n\n
\nvar obj = addon.createObject();\n// instead of:\n// var obj = new addon.Object();
\n\n\ncreateObject を
addon.cc` に登録しましょう:\n\n
\n// addon.cc\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nvoid CreateObject(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n MyObject::NewInstance(args);\n}\n\nvoid InitAll(Handle<Object> exports, Handle<Object> module) {\n MyObject::Init();\n\n NODE_SET_METHOD(module, "exports", CreateObject);\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\nmyobject.h
にオブジェクトを生成する static メソッド NewInstance
を\n導入しましょう (すなわち,それが JavaScript 内の new
の働きをします)。\n\n
\n// myobject.h\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n#include <node_object_wrap.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init();\n static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args);\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static void New(const v8::FunctionCallbackInfo<v8::Value>& args);\n static void PlusOne(const v8::FunctionCallbackInfo<v8::Value>& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\n実装は前述の myobject.cc
と同様です:\n\n
\n// myobject.cc\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init() {\n Isolate* isolate = Isolate::GetCurrent();\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewFromUtf8(isolate, "MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n // Prototype\n NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);\n\n constructor.Reset(isolate, tpl->GetFunction());\n}\n\nvoid MyObject::New(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n args.GetReturnValue().Set(args.This());\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n Local<Function> cons = Local<Function>::New(isolate, constructor);\n args.GetReturnValue().Set(cons->NewInstance(argc, argv));\n }\n}\n\nvoid MyObject::NewInstance(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n const unsigned argc = 1;\n Handle<Value> argv[argc] = { args[0] };\n Local<Function> cons = Local<Function>::New(isolate, constructor);\n Local<Object> instance = cons->NewInstance(argc, argv);\n\n args.GetReturnValue().Set(instance);\n}\n\nvoid MyObject::PlusOne(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());\n obj->value_ += 1;\n\n args.GetReturnValue().Set(Number::New(obj->value_));\n}
\n\n\nこれでテストします:\n\n
\n// test.js\nvar createObject = require('./build/Release/addon');\n\nvar obj = createObject(10);\nconsole.log( obj.plusOne() ); // 11\nconsole.log( obj.plusOne() ); // 12\nconsole.log( obj.plusOne() ); // 13\n\nvar obj2 = createObject(20);\nconsole.log( obj2.plusOne() ); // 21\nconsole.log( obj2.plusOne() ); // 22\nconsole.log( obj2.plusOne() ); // 23
\n",
"type": "module",
"displayName": "Factory of wrapped objects"
},
{
"textRaw": "Passing wrapped objects around",
"name": "passing_wrapped_objects_around",
- "desc": "\n\nC++ オブジェクトをラップして返すことに加えて、Node が提供するヘルパ関数\nnode::ObjectWrap::Unwrap
を使用してアンラップすることもできます。\n以下の addon.cc
では、二つの MyObject
オブジェクトを受け取る add()
\n関数を導入します:\n\n
\n#include <node.h>\n#include <node_object_wrap.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nHandle<Value> CreateObject(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n return scope.Close(MyObject::NewInstance(args));\n}\n\nHandle<Value> Add(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj1 = node::ObjectWrap::Unwrap<MyObject>(\n args[0]->ToObject());\n MyObject* obj2 = node::ObjectWrap::Unwrap<MyObject>(\n args[1]->ToObject());\n\n double sum = obj1->Value() + obj2->Value();\n return scope.Close(Number::New(sum));\n}\n\nvoid InitAll(Handle<Object> exports) {\n MyObject::Init();\n\n exports->Set(String::NewSymbol("createObject"),\n FunctionTemplate::New(CreateObject)->GetFunction());\n\n exports->Set(String::NewSymbol("add"),\n FunctionTemplate::New(Add)->GetFunction());\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\nよりおもしろくするために、myobject.h
にパブリックメソッドを導入しましょう。\nしたがって、アンラップされたオブジェクトのプライベート変数を調べることが\nできます。\n\n
\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n#include <node_object_wrap.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init();\n static v8::Handle<v8::Value> NewInstance(const v8::Arguments& args);\n double Value() const { return value_; }\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static v8::Handle<v8::Value> New(const v8::Arguments& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\nmyobject.cc
の実装はこれまでと同様です:\n\n
\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init() {\n Isolate* isolate = Isolate::GetCurrent();\n\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewSymbol("MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n constructor = Persistent<Function>::New(isolate, tpl->GetFunction());\n}\n\nHandle<Value> MyObject::New(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n return args.This();\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n return scope.Close(constructor->NewInstance(argc, argv));\n }\n}\n\nHandle<Value> MyObject::NewInstance(const Arguments& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n const unsigned argc = 1;\n Handle<Value> argv[argc] = { args[0] };\n Local<Object> instance = constructor->NewInstance(argc, argv);\n\n return scope.Close(instance);\n}
\n\n\nこれでテストします:\n\n
\nvar addon = require('./build/Release/addon');\n\nvar obj1 = addon.createObject(10);\nvar obj2 = addon.createObject(20);\nvar result = addon.add(obj1, obj2);\n\nconsole.log(result); // 30
\n",
+ "desc": "\n\nC++ オブジェクトをラップして返すことに加えて、Node が提供するヘルパ関数\nnode::ObjectWrap::Unwrap
を使用してアンラップすることもできます。\n以下の addon.cc
では、二つの MyObject
オブジェクトを受け取る add()
\n関数を導入します:\n\n
\n// addon.cc\n#include <node.h>\n#include <node_object_wrap.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nvoid CreateObject(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n MyObject::NewInstance(args);\n}\n\nvoid Add(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n MyObject* obj1 = node::ObjectWrap::Unwrap<MyObject>(\n args[0]->ToObject());\n MyObject* obj2 = node::ObjectWrap::Unwrap<MyObject>(\n args[1]->ToObject());\n\n double sum = obj1->value() + obj2->value();\n args.GetReturnValue().Set(Number::New(sum));\n}\n\nvoid InitAll(Handle<Object> exports) {\n MyObject::Init();\n\n NODE_SET_METHOD(exports, "createObject", CreateObject);\n NODE_SET_METHOD(exports, "add", Add);\n}\n\nNODE_MODULE(addon, InitAll)
\n\n\nよりおもしろくするために、myobject.h
にパブリックメソッドを導入しましょう。\nしたがって、アンラップされたオブジェクトのプライベート変数を調べることが\nできます。\n\n
\n// myobject.h\n#ifndef MYOBJECT_H\n#define MYOBJECT_H\n\n#include <node.h>\n#include <node_object_wrap.h>\n\nclass MyObject : public node::ObjectWrap {\n public:\n static void Init();\n static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args);\n inline double value() const { return value_; }\n\n private:\n explicit MyObject(double value = 0);\n ~MyObject();\n\n static void New(const v8::FunctionCallbackInfo<v8::Value>& args);\n static v8::Persistent<v8::Function> constructor;\n double value_;\n};\n\n#endif
\n\n\nmyobject.cc
の実装はこれまでと同様です:\n\n
\n// myobject.cc\n#include <node.h>\n#include "myobject.h"\n\nusing namespace v8;\n\nPersistent<Function> MyObject::constructor;\n\nMyObject::MyObject(double value) : value_(value) {\n}\n\nMyObject::~MyObject() {\n}\n\nvoid MyObject::Init() {\n Isolate* isolate = Isolate::GetCurrent();\n\n // Prepare constructor template\n Local<FunctionTemplate> tpl = FunctionTemplate::New(New);\n tpl->SetClassName(String::NewFromUtf8(isolate, "MyObject"));\n tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n constructor.Reset(isolate, tpl->GetFunction());\n}\n\nvoid MyObject::New(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n if (args.IsConstructCall()) {\n // Invoked as constructor: `new MyObject(...)`\n double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();\n MyObject* obj = new MyObject(value);\n obj->Wrap(args.This());\n args.GetReturnValue().Set(args.This());\n } else {\n // Invoked as plain function `MyObject(...)`, turn into construct call.\n const int argc = 1;\n Local<Value> argv[argc] = { args[0] };\n Local<Function> cons = Local<Function>::New(isolate, constructor);\n args.GetReturnValue().Set(cons->NewInstance(argc, argv));\n }\n}\n\nvoid MyObject::NewInstance(const FunctionCallbackInfo<Value>& args) {\n Isolate* isolate = Isolate::GetCurrent();\n HandleScope scope(isolate);\n\n const unsigned argc = 1;\n Handle<Value> argv[argc] = { args[0] };\n Local<Function> cons = Local<Function>::New(isolate, constructor);\n Local<Object> instance = cons->NewInstance(argc, argv);\n\n args.GetReturnValue().Set(instance);\n}
\n\n\nこれでテストします:\n\n
\n// test.js\nvar addon = require('./build/Release/addon');\n\nvar obj1 = addon.createObject(10);\nvar obj2 = addon.createObject(20);\nvar result = addon.add(obj1, obj2);\n\nconsole.log(result); // 30
\n",
"type": "module",
"displayName": "Passing wrapped objects around"
}
@@ -5021,7 +5009,7 @@
"textRaw": "Class: stream.Readable",
"type": "example",
"name": "stream.Readable",
- "desc": "\n\nstream.Readable
は抽象クラスで、下層の実装として [_read(size)
][]\nメソッドを実装することで拡張されるように設計されています。\n\n
\n\n\nプログラムの中で Readable ストリームを利用する方法については、\n前述の [ストリーム利用者のための API][] を参照してください。\nこの後に続くのは、あなたのプログラムの中で Readable ストリームを\n実装する方法の説明です。\n\n
\nExample: A Counting Stream
\n\n\nこれは Readable ストリームの基本的な例です。\nそれは 1 から 1,000,000 までの数を昇順で生成し、そして終了します。\n\n
\nvar Readable = require('stream').Readable;\nvar util = require('util');\nutil.inherits(Counter, Readable);\n\nfunction Counter(opt) {\n Readable.call(this, opt);\n this._max = 1000000;\n this._index = 1;\n}\n\nCounter.prototype._read = function() {\n var i = this._index++;\n if (i > this._max)\n this.push(null);\n else {\n var str = '' + i;\n var buf = new Buffer(str, 'ascii');\n this.push(buf);\n }\n};
\nExample: SimpleProtocol v1 (Sub-optimal)
\n\n\nこれは前に説明した parseHeader
関数とよく似ていますが、\n独自のストリームとして実装されています。\nまた、この実装は入ってくるデータを文字列に変換しないことに注意してください。\n\n
\n\n\nしかしながら、これは [Transform][] ストリームを使うことでよりうまく実装できます。\n後述のよりよい実装を参照してください。\n\n
\n// A parser for a simple data protocol.\n// The "header" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// NOTE: This can be done more simply as a Transform stream!\n// Using Readable directly for this is sub-optimal. See the\n// alternative example below under the Transform section.\n\nvar Readable = require('stream').Readable;\nvar util = require('util');\n\nutil.inherits(SimpleProtocol, Readable);\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\n// var parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.
\n",
+ "desc": "\n\nstream.Readable
は抽象クラスで、下層の実装として [_read(size)
][]\nメソッドを実装することで拡張されるように設計されています。\n\n
\n\n\nプログラムの中で Readable ストリームを利用する方法については、\n前述の [ストリーム利用者のための API][] を参照してください。\nこの後に続くのは、あなたのプログラムの中で Readable ストリームを\n実装する方法の説明です。\n\n
\nExample: A Counting Stream
\n\n\nこれは Readable ストリームの基本的な例です。\nそれは 1 から 1,000,000 までの数を昇順で生成し、そして終了します。\n\n
\nvar Readable = require('stream').Readable;\nvar util = require('util');\nutil.inherits(Counter, Readable);\n\nfunction Counter(opt) {\n Readable.call(this, opt);\n this._max = 1000000;\n this._index = 1;\n}\n\nCounter.prototype._read = function() {\n var i = this._index++;\n if (i > this._max)\n this.push(null);\n else {\n var str = '' + i;\n var buf = new Buffer(str, 'ascii');\n this.push(buf);\n }\n};
\nExample: SimpleProtocol v1 (Sub-optimal)
\n\n\nこれは前に説明した parseHeader
関数とよく似ていますが、\n独自のストリームとして実装されています。\nまた、この実装は入ってくるデータを文字列に変換しないことに注意してください。\n\n
\n\n\nしかしながら、これは [Transform][] ストリームを使うことでよりうまく実装できます。\n後述のよりよい実装を参照してください。\n\n
\n// A parser for a simple data protocol.\n// The "header" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// NOTE: This can be done more simply as a Transform stream!\n// Using Readable directly for this is sub-optimal. See the\n// alternative example below under the Transform section.\n\nvar Readable = require('stream').Readable;\nvar util = require('util');\n\nutil.inherits(SimpleProtocol, Readable);\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(source, options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\n// var parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.
\n",
"methods": [
{
"textRaw": "new stream.Readable([options])",
@@ -5362,7 +5350,7 @@
"textRaw": "Class: stream.Readable",
"type": "example",
"name": "stream.Readable",
- "desc": "\n\nstream.Readable
は抽象クラスで、下層の実装として [_read(size)
][]\nメソッドを実装することで拡張されるように設計されています。\n\n
\n\n\nプログラムの中で Readable ストリームを利用する方法については、\n前述の [ストリーム利用者のための API][] を参照してください。\nこの後に続くのは、あなたのプログラムの中で Readable ストリームを\n実装する方法の説明です。\n\n
\nExample: A Counting Stream
\n\n\nこれは Readable ストリームの基本的な例です。\nそれは 1 から 1,000,000 までの数を昇順で生成し、そして終了します。\n\n
\nvar Readable = require('stream').Readable;\nvar util = require('util');\nutil.inherits(Counter, Readable);\n\nfunction Counter(opt) {\n Readable.call(this, opt);\n this._max = 1000000;\n this._index = 1;\n}\n\nCounter.prototype._read = function() {\n var i = this._index++;\n if (i > this._max)\n this.push(null);\n else {\n var str = '' + i;\n var buf = new Buffer(str, 'ascii');\n this.push(buf);\n }\n};
\nExample: SimpleProtocol v1 (Sub-optimal)
\n\n\nこれは前に説明した parseHeader
関数とよく似ていますが、\n独自のストリームとして実装されています。\nまた、この実装は入ってくるデータを文字列に変換しないことに注意してください。\n\n
\n\n\nしかしながら、これは [Transform][] ストリームを使うことでよりうまく実装できます。\n後述のよりよい実装を参照してください。\n\n
\n// A parser for a simple data protocol.\n// The "header" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// NOTE: This can be done more simply as a Transform stream!\n// Using Readable directly for this is sub-optimal. See the\n// alternative example below under the Transform section.\n\nvar Readable = require('stream').Readable;\nvar util = require('util');\n\nutil.inherits(SimpleProtocol, Readable);\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\n// var parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.
\n",
+ "desc": "\n\nstream.Readable
は抽象クラスで、下層の実装として [_read(size)
][]\nメソッドを実装することで拡張されるように設計されています。\n\n
\n\n\nプログラムの中で Readable ストリームを利用する方法については、\n前述の [ストリーム利用者のための API][] を参照してください。\nこの後に続くのは、あなたのプログラムの中で Readable ストリームを\n実装する方法の説明です。\n\n
\nExample: A Counting Stream
\n\n\nこれは Readable ストリームの基本的な例です。\nそれは 1 から 1,000,000 までの数を昇順で生成し、そして終了します。\n\n
\nvar Readable = require('stream').Readable;\nvar util = require('util');\nutil.inherits(Counter, Readable);\n\nfunction Counter(opt) {\n Readable.call(this, opt);\n this._max = 1000000;\n this._index = 1;\n}\n\nCounter.prototype._read = function() {\n var i = this._index++;\n if (i > this._max)\n this.push(null);\n else {\n var str = '' + i;\n var buf = new Buffer(str, 'ascii');\n this.push(buf);\n }\n};
\nExample: SimpleProtocol v1 (Sub-optimal)
\n\n\nこれは前に説明した parseHeader
関数とよく似ていますが、\n独自のストリームとして実装されています。\nまた、この実装は入ってくるデータを文字列に変換しないことに注意してください。\n\n
\n\n\nしかしながら、これは [Transform][] ストリームを使うことでよりうまく実装できます。\n後述のよりよい実装を参照してください。\n\n
\n// A parser for a simple data protocol.\n// The "header" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// NOTE: This can be done more simply as a Transform stream!\n// Using Readable directly for this is sub-optimal. See the\n// alternative example below under the Transform section.\n\nvar Readable = require('stream').Readable;\nvar util = require('util');\n\nutil.inherits(SimpleProtocol, Readable);\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(source, options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\n// var parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.
\n",
"methods": [
{
"textRaw": "new stream.Readable([options])",
@@ -5477,6 +5465,25 @@
"name": "crypto",
"desc": "\n\nStability: 2 - Unstable; 将来のバージョンにおいて API の変更が\n議論されています。互換性を損なう変更は最小限になる予定です。\n後述します。
\n\n\nこのモジュールにアクセスするには require('crypto')
を使用します。\n\n
\n\n\n暗号化モジュールは安全な HTTPS ネットワークや http\nコネクションの一部として使われる、\n安全な認証情報をカプセル化する方法を提供します。\n\n
\n\n\n同時に OpenSSL のハッシュ、HMAC、暗号、復号、署名、そして検証へのラッパーを一式提供します。\n\n\n
\n",
"methods": [
+ {
+ "textRaw": "crypto.setEngine(engine, [flags])",
+ "type": "method",
+ "name": "setEngine",
+ "desc": "\n\n一部または全ての OpenSSL 関数のために、エンジンをロードまたは設定します\n(フラグによって選択されます)。\n\n
\n\n\nengine
は id か、エンジンの共有ライブラリへのパスかのいずれかです。\n\n
\n\n\nflags
はオプションで、デフォルトは ENGINE_METHOD_ALL
です。\n以下のフラグから一つまたは組み合わせを指定することが出来ます\n(constants
モジュールに定義されています)。\n\n
\n\nENGINE_METHOD_RSA
\nENGINE_METHOD_DSA
\nENGINE_METHOD_DH
\nENGINE_METHOD_RAND
\nENGINE_METHOD_ECDH
\nENGINE_METHOD_ECDSA
\nENGINE_METHOD_CIPHERS
\nENGINE_METHOD_DIGESTS
\nENGINE_METHOD_STORE
\nENGINE_METHOD_PKEY_METH
\nENGINE_METHOD_PKEY_ASN1_METH
\nENGINE_METHOD_ALL
\nENGINE_METHOD_NONE
\n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "engine"
+ },
+ {
+ "name": "flags",
+ "optional": true
+ }
+ ]
+ }
+ ]
+ },
{
"textRaw": "crypto.getCiphers()",
"type": "method",
@@ -5705,10 +5712,10 @@
]
},
{
- "textRaw": "crypto.pbkdf2(password, salt, iterations, keylen, callback)",
+ "textRaw": "crypto.pbkdf2(password, salt, iterations, keylen, [digest], callback)",
"type": "method",
"name": "pbkdf2",
- "desc": "\n\n疑似乱数を HMAC-SHA1 関数に適用して、与えられたパスワードと salt \n(ランダムなバイト値)、および繰り返しから、指定された長さの鍵を生成する、\n非同期の PBKDF2 です。\nコールバック関数は二つの引数を受け取る (err, derivedKey)
です。\n\n
\n",
+ "desc": "\n\n非同期の PBKDF2 関数です。\n選択された HMAC ダイジェスト関数 (デフォルト: SHA1) を適用して、\n要求されたパスワード、salt、および繰り返しの数から、\n指定された長さの鍵を生成します。\nコールバック関数は二つの引数を受け取ります: (err, derivedKey)
\n\n
\n\n\n例:\n\n
\ncrypto.pbkdf2('secret', 'salt', 4096, 512, 'sha256', function(err, key) {\n if (err)\n throw err;\n console.log(key.toString('hex')); // 'c5e478d...1469e50'\n});
\n\n\ncrypto.getHashes() からサポートされる\nダイジェスト関数の一覧を得ることが出来ます。\n\n
\n",
"signatures": [
{
"params": [
@@ -5724,6 +5731,10 @@
{
"name": "keylen"
},
+ {
+ "name": "digest",
+ "optional": true
+ },
{
"name": "callback"
}
@@ -5732,7 +5743,7 @@
]
},
{
- "textRaw": "crypto.pbkdf2Sync(password, salt, iterations, keylen)",
+ "textRaw": "crypto.pbkdf2Sync(password, salt, iterations, keylen, [digest])",
"type": "method",
"name": "pbkdf2Sync",
"desc": "\n\n同期版の PBKDF2 関数。\n生成された鍵を返すか、例外をスローします。\n\n
\n",
@@ -5750,6 +5761,10 @@
},
{
"name": "keylen"
+ },
+ {
+ "name": "digest",
+ "optional": true
}
]
}
@@ -6356,6 +6371,12 @@
"name": "NPN and SNI",
"type": "misc",
"desc": "\n\nNPN (Next Protocol Negotitation) と SNI (Server Name Indication) は\nTLS の拡張で、以下を可能にします。\n\n
\n\n- NPN - 一つの TLS サーバで複数のプロトコル (HTTP、SPDY) を使用。
\n- SNI - 一つの TLS サーバでホスト名の異なる複数の証明書を使用。
\n
\n"
+ },
+ {
+ "textRaw": "Perfect Forward Secrecy",
+ "name": "Perfect Forward Secrecy",
+ "type": "misc",
+ "desc": "\n\n用語 "[Forward Secrecy]" あるいは "Perfect Forward Secrecy" とは、\n鍵を合意 (すなわち鍵交換) する方法の特徴を説明します。\n実際のところ、それは (あなたの) サーバの秘密鍵が漏洩しても、\n盗聴者によって解読される通信は、特定の各セッション毎に生成される\n鍵のペアを取得したものに限られることを意味します。\n\n
\n\n\nこれは、ハンドシェークの度にランダムに生成される鍵のペアによって\n鍵合意することで達成されます (全てのセッションで同じ鍵を使うのとは対照的です)。\nPerfect Forward Secrecy を提供するこの方法の実装は、\n「一時的 (ephemeral)」と呼ばれます。\n\n
\n\n\n現在の所、Perfect Forward Secrecyとして2つの方法が一般的に使われています\n(従来の省略形に文字 "E" が負荷されていることに注意してください):\n\n
\n\n\n\n- [DHE] - ディフィー・ヘルマン鍵合意プロトコルの「一時的」版です。
\n- [ECDHE] - 楕円曲線ディフィー・ヘルマン鍵合意プロトコルの「一時的」版です。
\n
\n\n\n鍵の生成は高価な処理であるため、「一時的」な方法はパフォーマンスの面で\n不利かもしれません。\n\n\n
\n"
}
],
"methods": [
@@ -6374,7 +6395,7 @@
"textRaw": "tls.createServer(options, [secureConnectionListener])",
"type": "method",
"name": "createServer",
- "desc": "\n\n新しい [tls.Server][] を作成します。\nconnectionListener
は [secureConnection][] イベントのリスナとして\n自動的に登録されます。\noptions
は以下を持つことができます:\n\n\n
\n\n\n\npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、および CA の\n証明書を含む文字列またはバッファ\n(key
、cert
、および ca
オプションとは相互に排他的です)。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または Buffer
です\n(必須)。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です\n(必須)。
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \ncrl
: PEM でエンコードされた CRL (Certificate Revocation List、\n失効した証明書の一覧) の文字列または文字列の配列。
\n \nciphers
: 使用または除外する暗号を記述した文字列です。
\n[BEAST 攻撃]を抑制するために、このオプションと以下に示す honorCipherOrder
\nを共に使って、非 CBC 暗号を優先することを推奨します。
\nデフォルトは\nECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH
です。\n詳細は [OpenSSL 暗号リストフォーマットのドキュメント] を参照してください。
\nAES128-GCM-SHA256
は、Node.js が OpenSSL 1.0.1 以降とリンクされていて、\nクライアントが TLS 1.2 をサポートしている場合に使われます。\nRC4 は安全なフォールバックとして使われます。
\n注意: 以前のバージョンのこのセクションは AES256-SHA
を\n受け入れ可能な暗号であるかのように示していました。\n残念ながら、AES256-SHA
は CBC 暗号であり、したがって BEAST\n攻撃には弱いです。
\n \necdhCurve
: ECDH 暗号で使用する曲線を説明する名前、または全ての\nECDH 暗号を無効にする false
。
\nこれは ECDH (Elliptic Curve Diffie-Hellman) 暗号では必須です。\nECDH 暗号は RSA の新たな代替です。\nRSA を ECDH で置き換えるメリットは、[Forward secrecy] を提供することです。\nForward secrecy は、攻撃者があなたの秘密鍵を取得したとしても、\n彼らがそれ以前に取得したデータを解読出来ないことを意味します。
\nデフォルトは prime256v1
です。より詳細は [RFC 4492] を参照してください。
\n \nhandshakeTimeout
: SSL/TLS ハンドシェークがこの時間 (ミリ秒)\n以内に終了しなかった場合は接続をアボートします。\nデフォルトは 120 秒です。
\nハンドシェークがタイムアウトすると、tls.Server
オブジェクトで\n'clientError'
イベントが生成されます。
\n \nhonorCipherOrder
:\n暗号を選択する際に、クライアントではなくサーバの設定を使用します。
\nSSLv2 が使われる場合は、サーバは設定のリストをクライアントに送信し、\nクライアントが暗号を選択することに注意してください。
\nこのオプションはデフォルトでは無効ですが、BEAST 攻撃を抑制するために\nciphers
オプションと共に使用することを 推奨 します。
\n \nrequestCert
: true
の場合、サーバは接続しようとするクライアントからの\n証明書を要求します。デフォルトは false
です。
\n \nrejectUnauthorized
: true
の場合、サーバは提供された認証局の\nリストによって認証されていないコネクションを破棄します.\nこのオプションは requestCert
が true
の場合だけ効果があります。\nデフォルトは false
です。
\n \nNPNProtocols
: NPN プロトコルで使用可能な文字列または Buffer
の配列\n(プロトコルはその優先度に応じて並んでいる必要があります)。
\n \nSNICallback(servername, cb)
: クライアントが TLS 拡張の SNI を\nサポートしている場合に呼び出される関数です。\n二つの引数、servername
と cb
が渡されます。\nSNICallback
は、cb(null, ctx)
を呼び出す必要があります。\nctx
はSecureContext のインスタンスです\n(SecureContext を取得するために crypto.createCredentials(...).context
\nを使用することができます)。\nSNICallback
が渡されなかった場合は、デフォルトのコールバックとして\n後述する高水準 API が使用されます。
\n \nsessionTimeout
: サーバによって作成された TLS セッション識別子および TLS\nセッションチケットがタイムアウトするまでの秒数を指定する整数値です。\nより詳細は [SSL_CTX_set_timeout] を参照してください。
\n \nsessionIdContext
: セッション再開のための識別子となる文字列です。\nrequestCedrt
が true
の場合、デフォルトはコマンドライン引数から\n生成された MD5 ハッシュ値となります。\nそうでない場合はデフォルトは提供されません。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\nこれはシンプルはエコーサーバの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n key: fs.readFileSync('server-key.pem'),\n cert: fs.readFileSync('server-cert.pem'),\n\n // This is necessary only if using the client certificate authentication.\n requestCert: true,\n\n // This is necessary only if the client uses the self-signed certificate.\n ca: [ fs.readFileSync('client-cert.pem') ]\n};\n\nvar server = tls.createServer(options, function(socket) {\n console.log('server connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n socket.write("welcome!\\n");\n socket.setEncoding('utf8');\n socket.pipe(socket);\n});\nserver.listen(8000, function() {\n console.log('server bound');\n});
\n\n\nあるいは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('server.pfx'),\n\n // This is necessary only if using the client certificate authentication.\n requestCert: true,\n\n};\n\nvar server = tls.createServer(options, function(socket) {\n console.log('server connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n socket.write("welcome!\\n");\n socket.setEncoding('utf8');\n socket.pipe(socket);\n});\nserver.listen(8000, function() {\n console.log('server bound');\n});
\n\n\nopenssl s_client
を使用してこのサーバに接続するテストを行うことができます。\n\n
\nopenssl s_client -connect 127.0.0.1:8000
\n",
+ "desc": "\n\n新しい [tls.Server][] を作成します。\nconnectionListener
は [secureConnection][] イベントのリスナとして\n自動的に登録されます。\noptions
は以下を持つことができます:\n\n\n
\n\n\n\npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、および CA の\n証明書を含む文字列またはバッファ\n(key
、cert
、および ca
オプションとは相互に排他的です)。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または Buffer
です\n(必須)。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です\n(必須)。
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \ncrl
: PEM でエンコードされた CRL (Certificate Revocation List、\n失効した証明書の一覧) の文字列または文字列の配列。
\n \nciphers
: 使用または除外する暗号を記述した文字列です。
\n[BEAST 攻撃]を抑制するために、このオプションと以下に示す honorCipherOrder
\nを共に使って、非 CBC 暗号を優先することを推奨します。
\nデフォルトは\nECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH
です。\n詳細は [OpenSSL 暗号リストフォーマットのドキュメント] を参照してください。
\nECDHE-RSA-AES128-SHA256
と AES128-GCM-SHA256
は TLS v1.2 の暗号で、\nNode.js が (バンドルされているバージョンなどの) OpenSSL 1.0.1 以降と\nリンクされている場合に使われます。\nhonorCipherOrder
が有効でない限り、TLS v1.2 を使用していても\nクライアントはより弱い暗号を要求出来ることに注意してください。
\nRC4
は、クライアントがより古いバージョンの TLS プロトコルを喋る場合に\nフォールバックとして使われます。\nRC4
は近年疑いをもたれており、真に繊細なものに対しては\n漏洩を考慮すべきです。\n国家レベルの何者かがそれを破る力を持っていると推測されています。
\n注意: 以前のバージョンのこのセクションは AES256-SHA
を\n受け入れ可能な暗号であるかのように示していました。\n残念ながら、AES256-SHA
は CBC 暗号であり、したがって\n[BEAST 攻撃] には弱いです。\n使わない でください。
\n \necdhCurve
: ECDH 鍵合意で使用する曲線を説明する名前、または全ての\nECDH を無効にする false
。
\nデフォルトは prime256v1
です。より詳細は [RFC 4492] を参照してください。
\n \nhandshakeTimeout
: SSL/TLS ハンドシェークがこの時間 (ミリ秒)\n以内に終了しなかった場合は接続をアボートします。\nデフォルトは 120 秒です。
\nハンドシェークがタイムアウトすると、tls.Server
オブジェクトで\n'clientError'
イベントが生成されます。
\n \nhonorCipherOrder
:\n暗号を選択する際に、クライアントではなくサーバの設定を使用します。
\nこのオプションはデフォルトでは無効ですが、BEAST 攻撃を抑制するために\nciphers
オプションと共に使用することを 推奨 します。
\n注意: SSLv2 が使われる場合は、サーバは設定のリストをクライアントに送信し、\nクライアントが暗号を選択します。\nSSLv2 のサポートは、node.js が ./configure --with-sslv2
によって\n構成されない限り無効です。
\n \nrequestCert
: true
の場合、サーバは接続しようとするクライアントからの\n証明書を要求します。デフォルトは false
です。
\n \nrejectUnauthorized
: true
の場合、サーバは提供された認証局の\nリストによって認証されていないコネクションを破棄します.\nこのオプションは requestCert
が true
の場合だけ効果があります。\nデフォルトは false
です。
\n \nNPNProtocols
: NPN プロトコルで使用可能な文字列または Buffer
の配列\n(プロトコルはその優先度に応じて並んでいる必要があります)。
\n \nSNICallback(servername, cb)
: クライアントが TLS 拡張の SNI を\nサポートしている場合に呼び出される関数です。\n二つの引数、servername
と cb
が渡されます。\nSNICallback
は、cb(null, ctx)
を呼び出す必要があります。\nctx
はSecureContext のインスタンスです\n(SecureContext を取得するために crypto.createCredentials(...).context
\nを使用することができます)。\nSNICallback
が渡されなかった場合は、デフォルトのコールバックとして\n後述する高水準 API が使用されます。
\n \nsessionTimeout
: サーバによって作成された TLS セッション識別子および TLS\nセッションチケットがタイムアウトするまでの秒数を指定する整数値です。\nより詳細は [SSL_CTX_set_timeout] を参照してください。
\n \nsessionIdContext
: セッション再開のための識別子となる文字列です。\nrequestCedrt
が true
の場合、デフォルトはコマンドライン引数から\n生成された MD5 ハッシュ値となります。\nそうでない場合はデフォルトは提供されません。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\nこれはシンプルはエコーサーバの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n key: fs.readFileSync('server-key.pem'),\n cert: fs.readFileSync('server-cert.pem'),\n\n // This is necessary only if using the client certificate authentication.\n requestCert: true,\n\n // This is necessary only if the client uses the self-signed certificate.\n ca: [ fs.readFileSync('client-cert.pem') ]\n};\n\nvar server = tls.createServer(options, function(socket) {\n console.log('server connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n socket.write("welcome!\\n");\n socket.setEncoding('utf8');\n socket.pipe(socket);\n});\nserver.listen(8000, function() {\n console.log('server bound');\n});
\n\n\nあるいは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('server.pfx'),\n\n // This is necessary only if using the client certificate authentication.\n requestCert: true,\n\n};\n\nvar server = tls.createServer(options, function(socket) {\n console.log('server connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n socket.write("welcome!\\n");\n socket.setEncoding('utf8');\n socket.pipe(socket);\n});\nserver.listen(8000, function() {\n console.log('server bound');\n});
\n\n\nopenssl s_client
を使用してこのサーバに接続するテストを行うことができます。\n\n
\nopenssl s_client -connect 127.0.0.1:8000
\n",
"signatures": [
{
"params": [
@@ -6393,7 +6414,7 @@
"textRaw": "tls.connect(options, [callback])",
"type": "method",
"name": "connect",
- "desc": "\n\n与えられた port
と host
(旧 API) または options.port
と options.host
\nで新しいクライアントコネクションを作成します\n(host
が省略された場合、デフォルトは localhost
です)。\noptions
は以下を指定したオブジェクトです:\n\n
\n\n\n\nhost
: クライアントが接続するホスト。
\n \nport
: クライアントが接続するポート番号。
\n \nsocket
: 新しいソケットを生成するのではなく、与えられたソケット上で\nセキュアな接続を確立します。\nこのオプションが指定された場合、host
および port
は無視されます。
\n \npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、\nおよびサーバに対する CA の証明書を含む文字列またはバッファ。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または\nBuffer
です。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です。
\n \nsecureProtocol
: The SSL method to use, e.g. SSLv3_method
to force\nSSL version 3. The possible values depend on your installation of\nOpenSSL and are defined in the constant [SSL_METHODS][].
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \nrejectUnauthorized
: true
の場合、サーバ証明書は提供された認証局の\nリストによって検証されます。\n認証されなかった場合は 'error'
イベントが生成されます。\n認証は HTTP リクエストが送信される 前 にコネクションレベルで行われます。\nデフォルトは true です。
\n \nNPNProtocols
: サポートする NPN プロトコルの文字列または Buffer
\nの配列です。\nBuffer
は次のような形式です: 0x05hello0x5world
\n最初のバイトは次のプロトコル名の長さです\n(通常、配列を渡す方がシンプルです: ['hello', 'world']
)。
\n \nservername
: TLS 拡張である SNI (Server Name Indication) のサーバ名です。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\ncallback
引数は ['secureConnect'][] イベントのリスナとして\n加えられます。\n\n
\ntls.connect()
は [tls.TLSSocket][] オブジェクトを返します。\n\n
\nこれは前述のエコーサーバに接続するクライアントの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n // These are necessary only if using the client certificate authentication\n key: fs.readFileSync('client-key.pem'),\n cert: fs.readFileSync('client-cert.pem'),\n\n // This is necessary only if the server uses the self-signed certificate\n ca: [ fs.readFileSync('server-cert.pem') ]\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n\n\nまたは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('client.pfx')\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n",
+ "desc": "\n\n与えられた port
と host
(旧 API) または options.port
と options.host
\nで新しいクライアントコネクションを作成します\n(host
が省略された場合、デフォルトは localhost
です)。\noptions
は以下を指定したオブジェクトです:\n\n
\n\n\n\nhost
: クライアントが接続するホスト。
\n \nport
: クライアントが接続するポート番号。
\n \nsocket
: 新しいソケットを生成するのではなく、与えられたソケット上で\nセキュアな接続を確立します。\nこのオプションが指定された場合、host
および port
は無視されます。
\n \npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、\nおよびサーバに対する CA の証明書を含む文字列またはバッファ。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または\nBuffer
です。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です。
\n \nsecureProtocol
: The SSL method to use, e.g. SSLv3_method
to force\nSSL version 3. The possible values depend on your installation of\nOpenSSL and are defined in the constant [SSL_METHODS][].
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \nrejectUnauthorized
: true
の場合、サーバ証明書は提供された認証局の\nリストによって検証されます。\n認証されなかった場合は 'error'
イベントが生成されます;\nerr.code
は OpenSSL のエラーコードを含みます。\nデフォルトは true です。
\n \nNPNProtocols
: サポートする NPN プロトコルの文字列または Buffer
\nの配列です。\nBuffer
は次のような形式です: 0x05hello0x5world
\n最初のバイトは次のプロトコル名の長さです\n(通常、配列を渡す方がシンプルです: ['hello', 'world']
)。
\n \nservername
: TLS 拡張である SNI (Server Name Indication) のサーバ名です。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\ncallback
引数は ['secureConnect'][] イベントのリスナとして\n加えられます。\n\n
\ntls.connect()
は [tls.TLSSocket][] オブジェクトを返します。\n\n
\nこれは前述のエコーサーバに接続するクライアントの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n // These are necessary only if using the client certificate authentication\n key: fs.readFileSync('client-key.pem'),\n cert: fs.readFileSync('client-cert.pem'),\n\n // This is necessary only if the server uses the self-signed certificate\n ca: [ fs.readFileSync('server-cert.pem') ]\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n\n\nまたは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('client.pfx')\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n",
"signatures": [
{
"params": [
@@ -6431,7 +6452,7 @@
"textRaw": "tls.connect(port, [host], [options], [callback])",
"type": "method",
"name": "connect",
- "desc": "\n\n与えられた port
と host
(旧 API) または options.port
と options.host
\nで新しいクライアントコネクションを作成します\n(host
が省略された場合、デフォルトは localhost
です)。\noptions
は以下を指定したオブジェクトです:\n\n
\n\n\n\nhost
: クライアントが接続するホスト。
\n \nport
: クライアントが接続するポート番号。
\n \nsocket
: 新しいソケットを生成するのではなく、与えられたソケット上で\nセキュアな接続を確立します。\nこのオプションが指定された場合、host
および port
は無視されます。
\n \npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、\nおよびサーバに対する CA の証明書を含む文字列またはバッファ。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または\nBuffer
です。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です。
\n \nsecureProtocol
: The SSL method to use, e.g. SSLv3_method
to force\nSSL version 3. The possible values depend on your installation of\nOpenSSL and are defined in the constant [SSL_METHODS][].
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \nrejectUnauthorized
: true
の場合、サーバ証明書は提供された認証局の\nリストによって検証されます。\n認証されなかった場合は 'error'
イベントが生成されます。\n認証は HTTP リクエストが送信される 前 にコネクションレベルで行われます。\nデフォルトは true です。
\n \nNPNProtocols
: サポートする NPN プロトコルの文字列または Buffer
\nの配列です。\nBuffer
は次のような形式です: 0x05hello0x5world
\n最初のバイトは次のプロトコル名の長さです\n(通常、配列を渡す方がシンプルです: ['hello', 'world']
)。
\n \nservername
: TLS 拡張である SNI (Server Name Indication) のサーバ名です。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\ncallback
引数は ['secureConnect'][] イベントのリスナとして\n加えられます。\n\n
\ntls.connect()
は [tls.TLSSocket][] オブジェクトを返します。\n\n
\nこれは前述のエコーサーバに接続するクライアントの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n // These are necessary only if using the client certificate authentication\n key: fs.readFileSync('client-key.pem'),\n cert: fs.readFileSync('client-cert.pem'),\n\n // This is necessary only if the server uses the self-signed certificate\n ca: [ fs.readFileSync('server-cert.pem') ]\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n\n\nまたは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('client.pfx')\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n",
+ "desc": "\n\n与えられた port
と host
(旧 API) または options.port
と options.host
\nで新しいクライアントコネクションを作成します\n(host
が省略された場合、デフォルトは localhost
です)。\noptions
は以下を指定したオブジェクトです:\n\n
\n\n\n\nhost
: クライアントが接続するホスト。
\n \nport
: クライアントが接続するポート番号。
\n \nsocket
: 新しいソケットを生成するのではなく、与えられたソケット上で\nセキュアな接続を確立します。\nこのオプションが指定された場合、host
および port
は無視されます。
\n \npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、\nおよびサーバに対する CA の証明書を含む文字列またはバッファ。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または\nBuffer
です。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です。
\n \nsecureProtocol
: The SSL method to use, e.g. SSLv3_method
to force\nSSL version 3. The possible values depend on your installation of\nOpenSSL and are defined in the constant [SSL_METHODS][].
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \nrejectUnauthorized
: true
の場合、サーバ証明書は提供された認証局の\nリストによって検証されます。\n認証されなかった場合は 'error'
イベントが生成されます;\nerr.code
は OpenSSL のエラーコードを含みます。\nデフォルトは true です。
\n \nNPNProtocols
: サポートする NPN プロトコルの文字列または Buffer
\nの配列です。\nBuffer
は次のような形式です: 0x05hello0x5world
\n最初のバイトは次のプロトコル名の長さです\n(通常、配列を渡す方がシンプルです: ['hello', 'world']
)。
\n \nservername
: TLS 拡張である SNI (Server Name Indication) のサーバ名です。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\ncallback
引数は ['secureConnect'][] イベントのリスナとして\n加えられます。\n\n
\ntls.connect()
は [tls.TLSSocket][] オブジェクトを返します。\n\n
\nこれは前述のエコーサーバに接続するクライアントの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n // These are necessary only if using the client certificate authentication\n key: fs.readFileSync('client-key.pem'),\n cert: fs.readFileSync('client-cert.pem'),\n\n // This is necessary only if the server uses the self-signed certificate\n ca: [ fs.readFileSync('server-cert.pem') ]\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n\n\nまたは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('client.pfx')\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n",
"signatures": [
{
"params": [
@@ -6702,7 +6723,7 @@
{
"textRaw": "tlsSocket.localPort",
"name": "localPort",
- "desc": "\n\n数値表現によるローカルポートです。\n\n
\n\n\n"
+ "desc": "\n\n数値表現によるローカルポートです。\n\n
\n\n\n"
}
],
"methods": [
@@ -6746,6 +6767,21 @@
}
]
},
+ {
+ "textRaw": "tlsSocket.setMaxSendFragment(size)",
+ "type": "method",
+ "name": "setMaxSendFragment",
+ "desc": "\n\n最大の TLS フラグメントサイズを設定します (デフォルトおよび最大の値は 16384
、\n最少は 512
)。\n成功すれば true
、そうでなければ false
を返します。\n\n
\n\n\n小さなフラグメントサイズは、クライアントでのバッファリングの遅延を減少します:\n大きなフラグメントは、全てのフラグメントが受信されてその完全性が確かめられるまで\nTLS 層によってバッファリングされます;\n大きなフラグメントは複数のラウンドトリップに分割され、\nパケットの喪失や並べ替えにより遅延が発生することがあります。\nしかしながら、小さなフラグメントは余分な TLS フレームのバイトと\nCPU のオーバーヘッドを加えるため、全体としてサーバのスループットを\n低下させるでしょう。\n\n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "size"
+ }
+ ]
+ }
+ ]
+ },
{
"textRaw": "tlsSocket.address()",
"type": "method",
@@ -11351,7 +11387,7 @@
"textRaw": "readline.createInterface(options)",
"type": "method",
"name": "createInterface",
- "desc": "\n\n行を読み込む Interface
のインスタンスを作成します。\n以下の値を含む options
オブジェクトを受け取ります。\n\n
\n\n\n\ninput
- 監視する入力ストリーム (必須)。
\n \noutput
- 読み込んだデータを書くための出力ストリーム (必須)。
\n \ncompleter
- タブによる自動補完のための関数 (オプション)。\n後述の例を参照してください。
\n \nterminal
- input
および output
ストリームが TTY デバイスで、\nANSI/VT100 エスケープコードを出力する場合は true
を渡します。\nデフォルトはインスタンス生成時に output
に対して\nisTTY
でチェックします。
\n \n
\n\n\ncompleter
関数にはユーザが入力した現在の行が与えられ、\n2 つのエントリを含む配列を返すことが期待されます:\n\n
\n\n\n\n補完によってマッチするエントリの配列。
\n \nマッチングに使用された部分文字列。
\n \n
\n\n\nそれは次のようになります:\n[[substr1, substr2, ...], originalsubstring]
。\n\n
\n\n\n例:\n\n
\nfunction completer(line) {\n var completions = '.help .error .exit .quit .q'.split(' ')\n var hits = completions.filter(function(c) { return c.indexOf(line) == 0 })\n // show all completions if none found\n return [hits.length ? hits : completions, line]\n}
\n\n\ncompleter
が二つの引数を持つなら、それは非同期モードで実行されます。\n\n
\nfunction completer(linePartial, callback) {\n callback(null, [['123'], linePartial]);\n}
\n\n\ncreateInterface
には通常、ユーザからの入力を受け取るために process.stdin
と\nprocess.stdout
が使用されます。\n\n
\nvar readline = require('readline');\nvar rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n});
\n\n\nreadline のインスタンスを作成すると、ほとんどの場合 'line'
イベントを\n監視することになります。\n\n
\n\n\nもしこのインスタンスの terminal
が true
の場合、\noutput
ストリームはもし outout.columns
プロパティが定義されていれば\nそれに適合し、カラム幅が変更されると output
上で\n'resize'
イベントが生成されます\n(process.stdout
が TTY の場合、それは自動的に行われます)。\n\n
\n",
+ "desc": "\n\n行を読み込む Interface
のインスタンスを作成します。\n以下の値を含む options
オブジェクトを受け取ります。\n\n
\n\n\n\ninput
- 監視する入力ストリーム (必須)。
\n \noutput
- 読み込んだデータを書くための出力ストリーム (必須)。
\n \ncompleter
- タブによる自動補完のための関数 (オプション)。\n後述の例を参照してください。
\n \nterminal
- input
および output
ストリームが TTY デバイスで、\nANSI/VT100 エスケープコードを出力する場合は true
を渡します。\nデフォルトはインスタンス生成時に output
に対して\nisTTY
でチェックします。
\n \n
\n\n\ncompleter
関数にはユーザが入力した現在の行が与えられ、\n2 つのエントリを含む配列を返すことが期待されます:\n\n
\n\n\n\n補完によってマッチするエントリの配列。
\n \nマッチングに使用された部分文字列。
\n \n
\n\n\nそれは次のようになります:\n[[substr1, substr2, ...], originalsubstring]
。\n\n
\n\n\n例:\n\n
\nfunction completer(line) {\n var completions = '.help .error .exit .quit .q'.split(' ')\n var hits = completions.filter(function(c) { return c.indexOf(line) == 0 })\n // show all completions if none found\n return [hits.length ? hits : completions, line]\n}
\n\n\ncompleter
が二つの引数を持つなら、それは非同期モードで実行されます。\n\n
\nfunction completer(linePartial, callback) {\n callback(null, [['123'], linePartial]);\n}
\n\n\ncreateInterface
には通常、ユーザからの入力を受け取るために process.stdin
と\nprocess.stdout
が使用されます。\n\n
\nvar readline = require('readline');\nvar rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n});
\n\n\nreadline のインスタンスを作成すると、ほとんどの場合 'line'
イベントを\n監視することになります。\n\n
\n\n\nもしこのインスタンスの terminal
が true
の場合、\noutput
ストリームはもし outout.columns
プロパティが定義されていれば\nそれに適合し、カラム幅が変更されると output
上で\n'resize'
イベントが生成されます\n(process.stdout
が TTY の場合、それは自動的に行われます)。\n\n
\n",
"signatures": [
{
"params": [
@@ -11361,6 +11397,81 @@
]
}
]
+ },
+ {
+ "textRaw": "readline.cursorTo(stream, x, y)",
+ "type": "method",
+ "name": "cursorTo",
+ "desc": "\n\nカーソルを与えられた TTY スクリーンの指定の位置に移動します。\n\n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "stream"
+ },
+ {
+ "name": "x"
+ },
+ {
+ "name": "y"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "textRaw": "readline.moveCursor(stream, dx, dy)",
+ "type": "method",
+ "name": "moveCursor",
+ "desc": "\n\nカーソルを与えられた TTY スクリーンの現在の位置からの相対位置に移動します。\n\n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "stream"
+ },
+ {
+ "name": "dx"
+ },
+ {
+ "name": "dy"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "textRaw": "readline.clearLine(stream, dir)",
+ "type": "method",
+ "name": "clearLine",
+ "desc": "\n\n与えられた TTY スクリーンの現在の行を指定された方向に消去します。\ndir
は以下の値のいずれか:\n\n
\n\n\n\n-1
- カーソルから左方向 \n1
- カーソルから右方向 \n0
- 行全体 \n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "stream"
+ },
+ {
+ "name": "dir"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "textRaw": "readline.clearScreenDown(stream)",
+ "type": "method",
+ "name": "clearScreenDown",
+ "desc": "\n\nスクリーンのカーソルより下を消去します。\n\n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "stream"
+ }
+ ]
+ }
+ ]
}
],
"classes": [
@@ -11932,7 +12043,7 @@
"textRaw": "child_process.spawn(command, [args], [options])",
"type": "method",
"name": "spawn",
- "desc": "\n\n\ncommand
{String} 実行するコマンド \nargs
{Array} 文字列による引数の配列 \noptions
{Object}\ncwd
{String} 子プロセスのカレントワーキングディレクトリ \nstdio
{Array|String} 子プロセスの標準入出力の設定 (後述)。 \ncustomFds
{Array} Deprecated 子プロセスが標準入出力として使用する\nファイル記述子の配列 (後述) \nenv
{Object} 環境変数として与えるキー・値のペア \ndetached
{Boolean} 子プロセスがプロセスグループのリーダになるかどうか\n(後述)。 \nuid
{Number} このプロセスのユーザ識別子を設定します\n (setuid(2) を参照)。 \ngid
{Number} このプロセスのグループ識別子を設定します\n(setgid(2) を参照)。 \n
\n \n- return: {ChildProcess object}
\n
\n\n\nargs
をコマンドライン引数として、与えられた command
で新しいプロセスを起動します。\nargs
が省略された場合、空の配列がデフォルトとなります。\n\n
\n\n\n第 3 引数は追加のオプションを指定するために使われ、そのデフォルトは:\n\n
\n{ cwd: undefined,\n env: process.env\n}
\n\n\ncwd
で起動されたプロセスのワーキングディレクトリを指定することができます。\nenv
は新しいプロセスに見える環境変数を指定するために使います。\n\n
\n\n\nls -lh /usr を実行して
stdout、
stderr`、および終了コードを取得する例:\n\n
\nvar spawn = require('child_process').spawn,\n ls = spawn('ls', ['-lh', '/usr']);\n\nls.stdout.on('data', function (data) {\n console.log('stdout: ' + data);\n});\n\nls.stderr.on('data', function (data) {\n console.log('stderr: ' + data);\n});\n\nls.on('close', function (code) {\n console.log('child process exited with code ' + code);\n});
\n\n\nとても手の込んだ方法で実行する 'ps ax | grep ssh' の例:\n\n
\nvar spawn = require('child_process').spawn,\n ps = spawn('ps', ['ax']),\n grep = spawn('grep', ['ssh']);\n\nps.stdout.on('data', function (data) {\n grep.stdin.write(data);\n});\n\nps.stderr.on('data', function (data) {\n console.log('ps stderr: ' + data);\n});\n\nps.on('close', function (code) {\n if (code !== 0) {\n console.log('ps process exited with code ' + code);\n }\n grep.stdin.end();\n});\n\ngrep.stdout.on('data', function (data) {\n console.log('' + data);\n});\n\ngrep.stderr.on('data', function (data) {\n console.log('grep stderr: ' + data);\n});\n\ngrep.on('close', function (code) {\n if (code !== 0) {\n console.log('grep process exited with code ' + code);\n }\n});
\n\n\nexec の失敗をチェックする例:\n\n
\nvar spawn = require('child_process').spawn,\n child = spawn('bad_command');\n\nchild.stderr.setEncoding('utf8');\nchild.stderr.on('data', function (data) {\n if (/^execvp\\(\\)/.test(data)) {\n console.log('Failed to start child process.');\n }\n});
\n\n\nspawn()
は空の options
オブジェクトを受け取ると、\nprocess.env
を使うのではなく,空の環境変数で子プロセスを起動します。\nこれは廃止された API との互換性のためです。\n\n
\n\n\nchild_process.spawn()
の stdio
オプションは配列で、\nそれぞれのインデックスは子プロセスの fd に対応します。\n要素の値は以下のいずれかです:\n\n
\n\n\n\n'pipe'
- 子プロセスと親プロセスの間でパイプを作成します。\nパイプの親側の端点は child_process
オブジェクトのプロパティ\nChildProcess.stdio[fd]
として親プロセスに公開されます。\nfd 0~2 はそれぞれ、ChildProcess.stdin
、ChildProcess.stdout
、\nChildProcess.stderr
としても参照可能です。 \n'ipc'
- 親プロセスと子プロセスの間でメッセージパッシングのための\nIPC チャネル/ファイル記述子を作成します。\nChildProcess
は標準入出力に高々一つの IPC ファイル記述子を持ちます。\nこのオプションを設定すると、ChildProcess.send()
メソッドが有効になります。\n子プロセスがこのファイル記述子に JSON メッセージを書き込むと、\nそれは ChildProcess.on('message')
を引き起こします。\n子プロセスが Node.js プログラムなら、IPC チャネルの存在は process.send()
\nおよび process.on('message')
を有効にします。 \n'ignore'
- 子プロセスにファイル記述子を設定しません。\nNode は子プロセスを起動する際、常に fd 0~2 をオープンすることに\n注意してください。これらのうちのどれかが 'ignore'
の場合、node は\n/dev/null
をオープンして、それを子プロセスの fd に割り当てます。 \nStream
オブジェクト - tty、ファイル、ソケット、またはパイプを参照する\n読み込みまたは書き込み可能なストリームを子プロセスと共有します。\nストリームの下層にあるファイル記述子は、子プロセスの stdio
配列の\n対応する位置にコピーされます。 \n- 非負整数 - 整数の値を親プロセスが現在オープンしているファイル記述子として\n解釈されます。\nそれは
Stream
オブジェクトの場合と同様に子プロセスに共有されます。 \nnull
、undefined
- デフォルト値を使用します。\nstdio
の fd
が 0、1、または 2 (言い換えると stdin、stdout、または\nstderr) の場合はパイプが作成されます。fd が 3 以上の場合、デフォルトは\n'ignore'
です。 \n
\n\n\n簡易な記法として、stdio
に配列ではなく以下の文字列の一つを指定することも\nできます。\n\n
\n\n\n\nignore
- ['ignore', 'ignore', 'ignore']
\npipe
- ['pipe', 'pipe', 'pipe']
\ninherit
- [process.stdin, process.stdout, process.stderr]
または [0,1,2]
\n
\n\n\n例:\n\n
\nvar spawn = require('child_process').spawn;\n\n// Child will use parent's stdios\nspawn('prg', [], { stdio: 'inherit' });\n\n// Spawn child sharing only stderr\nspawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });\n\n// Open an extra fd=4, to interact with programs present a\n// startd-style interface.\nspawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });
\n\n\ndetached
オプションが設定されると、子プロセスは新しいプロセスグループの\nリーダになります。\nこれは親プロセスが終了しても子プロセスの実行が継続することを可能にします。\n\n
\n\n\nデフォルトでは、親プロセスは切り離された子プロセスの終了を待機します。\n親プロセスが child
を待機することを防ぐには、child.unref()
メソッドを\n使用し、親のイベントループに子のリファレンスカウントが含まれないようにします。\n\n
\n\n\n長時間実行する子プロセスを切り離し、出力をファイルにリダイレクトする例:\n\n
\n var fs = require('fs'),\n spawn = require('child_process').spawn,\n out = fs.openSync('./out.log', 'a'),\n err = fs.openSync('./out.log', 'a');\n\n var child = spawn('prg', [], {\n detached: true,\n stdio: [ 'ignore', out, err ]\n });\n\n child.unref();
\n\n\n長時間実行されるプロセスを開始するために detached
オプションを使用する場合、\nその stdio
が親と接続するような構成を与えられない限り、そのプロセスは\nバックグラウンドにとどまりません。\n親の stdio
が継承されるなら、子プロセスは制御しているターミナルに\n接続されたままです。\n\n
\n\n\n指定のファイル記述子を子プロセスの標準入出力に指定することを可能にする、\ncustomFds
と呼ばれる廃止されたオプションがありました。\nこの API は全てのプラットフォームに移植可能ではないために削除されました。\ncustomFds
は新しいプロセスの [stdin, stdout, stderr]
を既存のストリームに接続することを可能にしました;\n-1
は新しいストリームが作られなければならないことを意味していました。\n使用する場合は自己責任で。\n\n
\n関連項目: child_process.exec()
および child_process.fork()
\n\n
\n",
+ "desc": "\n\n\ncommand
{String} 実行するコマンド \nargs
{Array} 文字列による引数の配列 \noptions
{Object}\ncwd
{String} 子プロセスのカレントワーキングディレクトリ \nstdio
{Array|String} 子プロセスの標準入出力の設定 (後述)。 \ncustomFds
{Array} Deprecated 子プロセスが標準入出力として使用する\nファイル記述子の配列 (後述) \nenv
{Object} 環境変数として与えるキー・値のペア \ndetached
{Boolean} 子プロセスがプロセスグループのリーダになるかどうか\n(後述)。 \nuid
{Number} このプロセスのユーザ識別子を設定します\n (setuid(2) を参照)。 \ngid
{Number} このプロセスのグループ識別子を設定します\n(setgid(2) を参照)。 \n
\n \n- return: {ChildProcess object}
\n
\n\n\nargs
をコマンドライン引数として、与えられた command
で新しいプロセスを起動します。\nargs
が省略された場合、空の配列がデフォルトとなります。\n\n
\n\n\n第 3 引数は追加のオプションを指定するために使われ、そのデフォルトは:\n\n
\n{ cwd: undefined,\n env: process.env\n}
\n\n\ncwd
で起動されたプロセスのワーキングディレクトリを指定することができます。\nenv
は新しいプロセスに見える環境変数を指定するために使います。\n\n
\n\n\nls -lh /usr
を実行して stdout
、stderr
、および終了コードを取得する例:\n\n
\nvar spawn = require('child_process').spawn,\n ls = spawn('ls', ['-lh', '/usr']);\n\nls.stdout.on('data', function (data) {\n console.log('stdout: ' + data);\n});\n\nls.stderr.on('data', function (data) {\n console.log('stderr: ' + data);\n});\n\nls.on('close', function (code) {\n console.log('child process exited with code ' + code);\n});
\n\n\nとても手の込んだ方法で実行する 'ps ax | grep ssh' の例:\n\n
\nvar spawn = require('child_process').spawn,\n ps = spawn('ps', ['ax']),\n grep = spawn('grep', ['ssh']);\n\nps.stdout.on('data', function (data) {\n grep.stdin.write(data);\n});\n\nps.stderr.on('data', function (data) {\n console.log('ps stderr: ' + data);\n});\n\nps.on('close', function (code) {\n if (code !== 0) {\n console.log('ps process exited with code ' + code);\n }\n grep.stdin.end();\n});\n\ngrep.stdout.on('data', function (data) {\n console.log('' + data);\n});\n\ngrep.stderr.on('data', function (data) {\n console.log('grep stderr: ' + data);\n});\n\ngrep.on('close', function (code) {\n if (code !== 0) {\n console.log('grep process exited with code ' + code);\n }\n});
\n\n\nexec の失敗をチェックする例:\n\n
\nvar spawn = require('child_process').spawn,\n child = spawn('bad_command');\n\nchild.stderr.setEncoding('utf8');\nchild.stderr.on('data', function (data) {\n if (/^execvp\\(\\)/.test(data)) {\n console.log('Failed to start child process.');\n }\n});
\n\n\nspawn()
は空の options
オブジェクトを受け取ると、\nprocess.env
を使うのではなく,空の環境変数で子プロセスを起動します。\nこれは廃止された API との互換性のためです。\n\n
\n\n\nchild_process.spawn()
の stdio
オプションは配列で、\nそれぞれのインデックスは子プロセスの fd に対応します。\n要素の値は以下のいずれかです:\n\n
\n\n\n\n'pipe'
- 子プロセスと親プロセスの間でパイプを作成します。\nパイプの親側の端点は child_process
オブジェクトのプロパティ\nChildProcess.stdio[fd]
として親プロセスに公開されます。\nfd 0~2 はそれぞれ、ChildProcess.stdin
、ChildProcess.stdout
、\nChildProcess.stderr
としても参照可能です。 \n'ipc'
- 親プロセスと子プロセスの間でメッセージパッシングのための\nIPC チャネル/ファイル記述子を作成します。\nChildProcess
は標準入出力に高々一つの IPC ファイル記述子を持ちます。\nこのオプションを設定すると、ChildProcess.send()
メソッドが有効になります。\n子プロセスがこのファイル記述子に JSON メッセージを書き込むと、\nそれは ChildProcess.on('message')
を引き起こします。\n子プロセスが Node.js プログラムなら、IPC チャネルの存在は process.send()
\nおよび process.on('message')
を有効にします。 \n'ignore'
- 子プロセスにファイル記述子を設定しません。\nNode は子プロセスを起動する際、常に fd 0~2 をオープンすることに\n注意してください。これらのうちのどれかが 'ignore'
の場合、node は\n/dev/null
をオープンして、それを子プロセスの fd に割り当てます。 \nStream
オブジェクト - tty、ファイル、ソケット、またはパイプを参照する\n読み込みまたは書き込み可能なストリームを子プロセスと共有します。\nストリームの下層にあるファイル記述子は、子プロセスの stdio
配列の\n対応する位置にコピーされます。\nストリームは下層のファイル記述を持っていなければならないことに\n注意してください (ファイルストリームは 'open'
イベントが発生するまで\nそれを持ちません)。 \n- 非負整数 - 整数の値を親プロセスが現在オープンしているファイル記述子として\n解釈されます。\nそれは
Stream
オブジェクトの場合と同様に子プロセスに共有されます。 \nnull
、undefined
- デフォルト値を使用します。\nstdio
の fd
が 0、1、または 2 (言い換えると stdin、stdout、または\nstderr) の場合はパイプが作成されます。fd が 3 以上の場合、デフォルトは\n'ignore'
です。 \n
\n\n\n簡易な記法として、stdio
に配列ではなく以下の文字列の一つを指定することも\nできます。\n\n
\n\n\n\nignore
- ['ignore', 'ignore', 'ignore']
\npipe
- ['pipe', 'pipe', 'pipe']
\ninherit
- [process.stdin, process.stdout, process.stderr]
または [0,1,2]
\n
\n\n\n例:\n\n
\nvar spawn = require('child_process').spawn;\n\n// Child will use parent's stdios\nspawn('prg', [], { stdio: 'inherit' });\n\n// Spawn child sharing only stderr\nspawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });\n\n// Open an extra fd=4, to interact with programs present a\n// startd-style interface.\nspawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });
\n\n\ndetached
オプションが設定されると、子プロセスは新しいプロセスグループの\nリーダになります。\nこれは親プロセスが終了しても子プロセスの実行が継続することを可能にします。\n\n
\n\n\nデフォルトでは、親プロセスは切り離された子プロセスの終了を待機します。\n親プロセスが child
を待機することを防ぐには、child.unref()
メソッドを\n使用し、親のイベントループに子のリファレンスカウントが含まれないようにします。\n\n
\n\n\n長時間実行する子プロセスを切り離し、出力をファイルにリダイレクトする例:\n\n
\n var fs = require('fs'),\n spawn = require('child_process').spawn,\n out = fs.openSync('./out.log', 'a'),\n err = fs.openSync('./out.log', 'a');\n\n var child = spawn('prg', [], {\n detached: true,\n stdio: [ 'ignore', out, err ]\n });\n\n child.unref();
\n\n\n長時間実行されるプロセスを開始するために detached
オプションを使用する場合、\nその stdio
が親と接続するような構成を与えられない限り、そのプロセスは\nバックグラウンドにとどまりません。\n親の stdio
が継承されるなら、子プロセスは制御しているターミナルに\n接続されたままです。\n\n
\n\n\n指定のファイル記述子を子プロセスの標準入出力に指定することを可能にする、\ncustomFds
と呼ばれる廃止されたオプションがありました。\nこの API は全てのプラットフォームに移植可能ではないために削除されました。\ncustomFds
は新しいプロセスの [stdin, stdout, stderr]
を既存のストリームに接続することを可能にしました;\n-1
は新しいストリームが作られなければならないことを意味していました。\n使用する場合は自己責任で。\n\n
\n関連項目: child_process.exec()
および child_process.fork()
\n\n
\n",
"signatures": [
{
"params": [
@@ -11974,7 +12085,7 @@
]
},
{
- "textRaw": "child_process.execFile(file, args, options, callback)",
+ "textRaw": "child_process.execFile(file, [args], [options], [callback])",
"type": "method",
"name": "execFile",
"desc": "\n\n\nfile
{String} 実行するプログラムのファイル名 \nargs
{Array} 文字列による引数の配列 \noptions
{Object}\ncwd
{String} 子プロセスのカレントワーキングディレクトリ \nenv
{Object} 環境変数として与えるキー・値のペア \nencoding
{String} (Default: 'utf8') \ntimeout
{Number} (Default: 0) \nmaxBuffer
{Number} (Default: 200*1024) \nkillSignal
{String} (Default: 'SIGTERM') \n
\n \ncallback
{Function} プロセスが終了するとその出力を伴って呼び出されます\nerror
{Error} \nstdout
{Buffer} \nstderr
{Buffer} \n
\n \n- Return: ChildProcess object
\n
\n\n\n子シェルで実行する代わりに指定されたファイルを直接実行することを除いて\nchild_process.exec()
と同様です。\nこれは child_process.exec
より若干効率的で、同じオプションを持ちます。\n\n\n
\n",
@@ -11985,13 +12096,16 @@
"name": "file"
},
{
- "name": "args"
+ "name": "args",
+ "optional": true
},
{
- "name": "options"
+ "name": "options",
+ "optional": true
},
{
- "name": "callback"
+ "name": "callback",
+ "optional": true
}
]
}
@@ -12001,7 +12115,7 @@
"textRaw": "child_process.fork(modulePath, [args], [options])",
"type": "method",
"name": "fork",
- "desc": "\n\n\nmodulePath
{String} 子プロセスで実行するモジュール \nargs
{Array} 文字列による引数の配列 \noptions
{Object}\ncwd
{String} 子プロセスのカレントワーキングディレクトリ \nenv
{Object} 環境変数として与えるキー・値のペア \nencoding
{String} (デフォルト: 'utf8') \nexecPath
{String} 子プロセスの作成に使われる実行ファイル \nexecArgv
{Array} 実行ファイルに渡される引数を表す文字列の配列\n(デフォルトは process.execArgv
)。 \nsilent
{Boolean} true
の場合、起動された子プロセスの標準入力と標準出力が\n親プロセスに関連づけられるのを抑止します (デフォルトは false
)。 \n
\n \n- Return: ChildProcess object
\n
\n\n\nこれは spawn()
の特別版で、Node プロセスを起動します。\n返されるオブジェクトは通常の ChildProcess の全てのメソッドに加えて、\n組み込みの通信チャネルを持ちます。\n詳細は child.send(message, [sendHandle])
を参照してください。\n\n
\n\n\nこれらの子 Node は、やはり V8 の新しいインスタンスです。\n新しい Node ごとに少なくとも 30 ミリ秒の起動時間と \n10MB のメモリを前提としてください。\nつまり、数千の子プロセスを作ることは出来ません。\n\n
\n\n\noptions
オブジェクト中の execPath
プロパティは、\n現在の node
実行ファイルではない子プロセスの作成を可能にします。\nデフォルトでは、子プロセスの環境変数 NODE_CHANNEL_FD
によって示される\nファイル記述子を通じて対話することに注意しなければなりません。\nこのファイル記述子における入力と出力は、改行で区切られた JSON オブジェクトです。\n\n
\n",
+ "desc": "\n\n\nmodulePath
{String} 子プロセスで実行するモジュール \nargs
{Array} 文字列による引数の配列 \noptions
{Object}\ncwd
{String} 子プロセスのカレントワーキングディレクトリ \nenv
{Object} 環境変数として与えるキー・値のペア \nencoding
{String} (デフォルト: 'utf8') \nexecPath
{String} 子プロセスの作成に使われる実行ファイル \nexecArgv
{Array} 実行ファイルに渡される引数を表す文字列の配列\n(デフォルトは process.execArgv
)。 \nsilent
{Boolean} true
の場合、子プロセスの標準入力、標準出力、\n標準エラー出力は親プロセスにパイプされます。\nそうでない場合は親プロセスから継承します。\nより詳細は spawn()
の pipe
および inherit
オプションを参照してください\n(デフォルトは false
)。 \n
\n \n- Return: ChildProcess object
\n
\n\n\nこれは spawn()
の特別版で、Node プロセスを起動します。\n返されるオブジェクトは通常の ChildProcess の全てのメソッドに加えて、\n組み込みの通信チャネルを持ちます。\n詳細は child.send(message, [sendHandle])
を参照してください。\n\n
\n\n\nこれらの子 Node は、やはり V8 の新しいインスタンスです。\n新しい Node ごとに少なくとも 30 ミリ秒の起動時間と \n10MB のメモリを前提としてください。\nつまり、数千の子プロセスを作ることは出来ません。\n\n
\n\n\noptions
オブジェクト中の execPath
プロパティは、\n現在の node
実行ファイルではない子プロセスの作成を可能にします。\nデフォルトでは、子プロセスの環境変数 NODE_CHANNEL_FD
によって示される\nファイル記述子を通じて対話することに注意しなければなりません。\nこのファイル記述子における入力と出力は、改行で区切られた JSON オブジェクトです。\n\n
\n",
"signatures": [
{
"params": [
@@ -13027,7 +13141,7 @@
"type": "event",
"name": "fork",
"params": [],
- "desc": "\n\n新しいワーカがフォークされると、クラスタモジュールは 'fork'
イベントを\n生成します。\nこれはワーカの活動をロギングしたり、タイムアウトのために使うことができます。\n\n
\nvar timeouts = [];\nfunction errorMsg() {\n console.error("Something must be wrong with the connection ...");\n}\n\ncluster.on('fork', function(worker) {\n timeouts[worker.id] = setTimeout(errorMsg, 2000);\n});\ncluster.on('listening', function(worker, address) {\n clearTimeout(timeouts[worker.id]);\n});\ncluster.on('exit', function(worker, code, signal) {\n clearTimeout(timeouts[worker.id]);\n errorMsg();\n});
\n"
+ "desc": "\n\n新しいワーカがフォークされると、クラスタモジュールは 'fork'
イベントを\n生成します。\nこれはワーカの活動をロギングしたり、タイムアウトのために使うことができます。\n\n
\nvar timeouts = [];\nfunction errorMsg() {\n console.error("Something must be wrong with the connection ...");\n}\n\ncluster.on('fork', function(worker) {\n timeouts[worker.id] = setTimeout(errorMsg, 2000);\n});\ncluster.on('listening', function(worker, address) {\n clearTimeout(timeouts[worker.id]);\n});\ncluster.on('exit', function(worker, code, signal) {\n clearTimeout(timeouts[worker.id]);\n errorMsg();\n});
\n"
},
{
"textRaw": "Event: 'online'",
diff --git a/api/appendix_1.html b/api/appendix_1.html
index e695e07..c7ef26d 100644
--- a/api/appendix_1.html
+++ b/api/appendix_1.html
@@ -2,7 +2,7 @@
- Appendix 1 - Third Party Modules Node.js v0.11.10 Manual & Documentation
+ Appendix 1 - Third Party Modules Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -162,7 +162,7 @@
Appendix 1 - Third Party Modules@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/assert.html b/api/assert.html
index 53fbf4d..356440b 100644
--- a/api/assert.html
+++ b/api/assert.html
@@ -2,7 +2,7 @@
- Assert Node.js v0.11.10 Manual & Documentation
+ Assert Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -251,7 +251,7 @@
assert.ifError(value)@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/buffer.html b/api/buffer.html
index e4ce203..b8fd822 100644
--- a/api/buffer.html
+++ b/api/buffer.html
@@ -2,7 +2,7 @@
- Buffer Node.js v0.11.10 Manual & Documentation
+ Buffer Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -1400,7 +1400,7 @@
Class: SlowBuffer@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/child_process.html b/api/child_process.html
index e8c45bd..f851638 100644
--- a/api/child_process.html
+++ b/api/child_process.html
@@ -2,7 +2,7 @@
- Child Process Node.js v0.11.10 Manual & Documentation
+ Child Process Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -78,7 +78,7 @@
Table of Contents
child_process.spawn(command, [args], [options])
child_process.exec(command, [options], callback)
-child_process.execFile(file, args, options, callback)
+child_process.execFile(file, [args], [options], [callback])
child_process.fork(modulePath, [args], [options])
@@ -759,7 +759,7 @@ child_process.spawn(command, [args], [options])#
+child_process.execFile(file, [args], [options], [callback])#
@@ -1208,8 +1215,11 @@ child_process.fork(modulePath, [args], [options])execPath
{String} 子プロセスの作成に使われる実行ファイル
execArgv
{Array} 実行ファイルに渡される引数を表す文字列の配列
(デフォルトは process.execArgv
)。
-silent
{Boolean} true
の場合、起動された子プロセスの標準入力と標準出力が
-親プロセスに関連づけられるのを抑止します (デフォルトは false
)。
+silent
{Boolean} true
の場合、子プロセスの標準入力、標準出力、
+標準エラー出力は親プロセスにパイプされます。
+そうでない場合は親プロセスから継承します。
+より詳細は spawn()
の pipe
および inherit
オプションを参照してください
+(デフォルトは false
)。
Return: ChildProcess object
@@ -1283,7 +1293,7 @@ child_process.fork(modulePath, [args], [options])@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/child_process.json b/api/child_process.json
index 8a9565c..fd0e519 100644
--- a/api/child_process.json
+++ b/api/child_process.json
@@ -157,7 +157,7 @@
"textRaw": "child_process.spawn(command, [args], [options])",
"type": "method",
"name": "spawn",
- "desc": "\n\n\ncommand
{String} 実行するコマンド \nargs
{Array} 文字列による引数の配列 \noptions
{Object}\ncwd
{String} 子プロセスのカレントワーキングディレクトリ \nstdio
{Array|String} 子プロセスの標準入出力の設定 (後述)。 \ncustomFds
{Array} Deprecated 子プロセスが標準入出力として使用する\nファイル記述子の配列 (後述) \nenv
{Object} 環境変数として与えるキー・値のペア \ndetached
{Boolean} 子プロセスがプロセスグループのリーダになるかどうか\n(後述)。 \nuid
{Number} このプロセスのユーザ識別子を設定します\n (setuid(2) を参照)。 \ngid
{Number} このプロセスのグループ識別子を設定します\n(setgid(2) を参照)。 \n
\n \n- return: {ChildProcess object}
\n
\n\n\nargs
をコマンドライン引数として、与えられた command
で新しいプロセスを起動します。\nargs
が省略された場合、空の配列がデフォルトとなります。\n\n
\n\n\n第 3 引数は追加のオプションを指定するために使われ、そのデフォルトは:\n\n
\n{ cwd: undefined,\n env: process.env\n}
\n\n\ncwd
で起動されたプロセスのワーキングディレクトリを指定することができます。\nenv
は新しいプロセスに見える環境変数を指定するために使います。\n\n
\n\n\nls -lh /usr を実行して
stdout、
stderr`、および終了コードを取得する例:\n\n
\nvar spawn = require('child_process').spawn,\n ls = spawn('ls', ['-lh', '/usr']);\n\nls.stdout.on('data', function (data) {\n console.log('stdout: ' + data);\n});\n\nls.stderr.on('data', function (data) {\n console.log('stderr: ' + data);\n});\n\nls.on('close', function (code) {\n console.log('child process exited with code ' + code);\n});
\n\n\nとても手の込んだ方法で実行する 'ps ax | grep ssh' の例:\n\n
\nvar spawn = require('child_process').spawn,\n ps = spawn('ps', ['ax']),\n grep = spawn('grep', ['ssh']);\n\nps.stdout.on('data', function (data) {\n grep.stdin.write(data);\n});\n\nps.stderr.on('data', function (data) {\n console.log('ps stderr: ' + data);\n});\n\nps.on('close', function (code) {\n if (code !== 0) {\n console.log('ps process exited with code ' + code);\n }\n grep.stdin.end();\n});\n\ngrep.stdout.on('data', function (data) {\n console.log('' + data);\n});\n\ngrep.stderr.on('data', function (data) {\n console.log('grep stderr: ' + data);\n});\n\ngrep.on('close', function (code) {\n if (code !== 0) {\n console.log('grep process exited with code ' + code);\n }\n});
\n\n\nexec の失敗をチェックする例:\n\n
\nvar spawn = require('child_process').spawn,\n child = spawn('bad_command');\n\nchild.stderr.setEncoding('utf8');\nchild.stderr.on('data', function (data) {\n if (/^execvp\\(\\)/.test(data)) {\n console.log('Failed to start child process.');\n }\n});
\n\n\nspawn()
は空の options
オブジェクトを受け取ると、\nprocess.env
を使うのではなく,空の環境変数で子プロセスを起動します。\nこれは廃止された API との互換性のためです。\n\n
\n\n\nchild_process.spawn()
の stdio
オプションは配列で、\nそれぞれのインデックスは子プロセスの fd に対応します。\n要素の値は以下のいずれかです:\n\n
\n\n\n\n'pipe'
- 子プロセスと親プロセスの間でパイプを作成します。\nパイプの親側の端点は child_process
オブジェクトのプロパティ\nChildProcess.stdio[fd]
として親プロセスに公開されます。\nfd 0~2 はそれぞれ、ChildProcess.stdin
、ChildProcess.stdout
、\nChildProcess.stderr
としても参照可能です。 \n'ipc'
- 親プロセスと子プロセスの間でメッセージパッシングのための\nIPC チャネル/ファイル記述子を作成します。\nChildProcess
は標準入出力に高々一つの IPC ファイル記述子を持ちます。\nこのオプションを設定すると、ChildProcess.send()
メソッドが有効になります。\n子プロセスがこのファイル記述子に JSON メッセージを書き込むと、\nそれは ChildProcess.on('message')
を引き起こします。\n子プロセスが Node.js プログラムなら、IPC チャネルの存在は process.send()
\nおよび process.on('message')
を有効にします。 \n'ignore'
- 子プロセスにファイル記述子を設定しません。\nNode は子プロセスを起動する際、常に fd 0~2 をオープンすることに\n注意してください。これらのうちのどれかが 'ignore'
の場合、node は\n/dev/null
をオープンして、それを子プロセスの fd に割り当てます。 \nStream
オブジェクト - tty、ファイル、ソケット、またはパイプを参照する\n読み込みまたは書き込み可能なストリームを子プロセスと共有します。\nストリームの下層にあるファイル記述子は、子プロセスの stdio
配列の\n対応する位置にコピーされます。 \n- 非負整数 - 整数の値を親プロセスが現在オープンしているファイル記述子として\n解釈されます。\nそれは
Stream
オブジェクトの場合と同様に子プロセスに共有されます。 \nnull
、undefined
- デフォルト値を使用します。\nstdio
の fd
が 0、1、または 2 (言い換えると stdin、stdout、または\nstderr) の場合はパイプが作成されます。fd が 3 以上の場合、デフォルトは\n'ignore'
です。 \n
\n\n\n簡易な記法として、stdio
に配列ではなく以下の文字列の一つを指定することも\nできます。\n\n
\n\n\n\nignore
- ['ignore', 'ignore', 'ignore']
\npipe
- ['pipe', 'pipe', 'pipe']
\ninherit
- [process.stdin, process.stdout, process.stderr]
または [0,1,2]
\n
\n\n\n例:\n\n
\nvar spawn = require('child_process').spawn;\n\n// Child will use parent's stdios\nspawn('prg', [], { stdio: 'inherit' });\n\n// Spawn child sharing only stderr\nspawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });\n\n// Open an extra fd=4, to interact with programs present a\n// startd-style interface.\nspawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });
\n\n\ndetached
オプションが設定されると、子プロセスは新しいプロセスグループの\nリーダになります。\nこれは親プロセスが終了しても子プロセスの実行が継続することを可能にします。\n\n
\n\n\nデフォルトでは、親プロセスは切り離された子プロセスの終了を待機します。\n親プロセスが child
を待機することを防ぐには、child.unref()
メソッドを\n使用し、親のイベントループに子のリファレンスカウントが含まれないようにします。\n\n
\n\n\n長時間実行する子プロセスを切り離し、出力をファイルにリダイレクトする例:\n\n
\n var fs = require('fs'),\n spawn = require('child_process').spawn,\n out = fs.openSync('./out.log', 'a'),\n err = fs.openSync('./out.log', 'a');\n\n var child = spawn('prg', [], {\n detached: true,\n stdio: [ 'ignore', out, err ]\n });\n\n child.unref();
\n\n\n長時間実行されるプロセスを開始するために detached
オプションを使用する場合、\nその stdio
が親と接続するような構成を与えられない限り、そのプロセスは\nバックグラウンドにとどまりません。\n親の stdio
が継承されるなら、子プロセスは制御しているターミナルに\n接続されたままです。\n\n
\n\n\n指定のファイル記述子を子プロセスの標準入出力に指定することを可能にする、\ncustomFds
と呼ばれる廃止されたオプションがありました。\nこの API は全てのプラットフォームに移植可能ではないために削除されました。\ncustomFds
は新しいプロセスの [stdin, stdout, stderr]
を既存のストリームに接続することを可能にしました;\n-1
は新しいストリームが作られなければならないことを意味していました。\n使用する場合は自己責任で。\n\n
\n関連項目: child_process.exec()
および child_process.fork()
\n\n
\n",
+ "desc": "\n\n\ncommand
{String} 実行するコマンド \nargs
{Array} 文字列による引数の配列 \noptions
{Object}\ncwd
{String} 子プロセスのカレントワーキングディレクトリ \nstdio
{Array|String} 子プロセスの標準入出力の設定 (後述)。 \ncustomFds
{Array} Deprecated 子プロセスが標準入出力として使用する\nファイル記述子の配列 (後述) \nenv
{Object} 環境変数として与えるキー・値のペア \ndetached
{Boolean} 子プロセスがプロセスグループのリーダになるかどうか\n(後述)。 \nuid
{Number} このプロセスのユーザ識別子を設定します\n (setuid(2) を参照)。 \ngid
{Number} このプロセスのグループ識別子を設定します\n(setgid(2) を参照)。 \n
\n \n- return: {ChildProcess object}
\n
\n\n\nargs
をコマンドライン引数として、与えられた command
で新しいプロセスを起動します。\nargs
が省略された場合、空の配列がデフォルトとなります。\n\n
\n\n\n第 3 引数は追加のオプションを指定するために使われ、そのデフォルトは:\n\n
\n{ cwd: undefined,\n env: process.env\n}
\n\n\ncwd
で起動されたプロセスのワーキングディレクトリを指定することができます。\nenv
は新しいプロセスに見える環境変数を指定するために使います。\n\n
\n\n\nls -lh /usr
を実行して stdout
、stderr
、および終了コードを取得する例:\n\n
\nvar spawn = require('child_process').spawn,\n ls = spawn('ls', ['-lh', '/usr']);\n\nls.stdout.on('data', function (data) {\n console.log('stdout: ' + data);\n});\n\nls.stderr.on('data', function (data) {\n console.log('stderr: ' + data);\n});\n\nls.on('close', function (code) {\n console.log('child process exited with code ' + code);\n});
\n\n\nとても手の込んだ方法で実行する 'ps ax | grep ssh' の例:\n\n
\nvar spawn = require('child_process').spawn,\n ps = spawn('ps', ['ax']),\n grep = spawn('grep', ['ssh']);\n\nps.stdout.on('data', function (data) {\n grep.stdin.write(data);\n});\n\nps.stderr.on('data', function (data) {\n console.log('ps stderr: ' + data);\n});\n\nps.on('close', function (code) {\n if (code !== 0) {\n console.log('ps process exited with code ' + code);\n }\n grep.stdin.end();\n});\n\ngrep.stdout.on('data', function (data) {\n console.log('' + data);\n});\n\ngrep.stderr.on('data', function (data) {\n console.log('grep stderr: ' + data);\n});\n\ngrep.on('close', function (code) {\n if (code !== 0) {\n console.log('grep process exited with code ' + code);\n }\n});
\n\n\nexec の失敗をチェックする例:\n\n
\nvar spawn = require('child_process').spawn,\n child = spawn('bad_command');\n\nchild.stderr.setEncoding('utf8');\nchild.stderr.on('data', function (data) {\n if (/^execvp\\(\\)/.test(data)) {\n console.log('Failed to start child process.');\n }\n});
\n\n\nspawn()
は空の options
オブジェクトを受け取ると、\nprocess.env
を使うのではなく,空の環境変数で子プロセスを起動します。\nこれは廃止された API との互換性のためです。\n\n
\n\n\nchild_process.spawn()
の stdio
オプションは配列で、\nそれぞれのインデックスは子プロセスの fd に対応します。\n要素の値は以下のいずれかです:\n\n
\n\n\n\n'pipe'
- 子プロセスと親プロセスの間でパイプを作成します。\nパイプの親側の端点は child_process
オブジェクトのプロパティ\nChildProcess.stdio[fd]
として親プロセスに公開されます。\nfd 0~2 はそれぞれ、ChildProcess.stdin
、ChildProcess.stdout
、\nChildProcess.stderr
としても参照可能です。 \n'ipc'
- 親プロセスと子プロセスの間でメッセージパッシングのための\nIPC チャネル/ファイル記述子を作成します。\nChildProcess
は標準入出力に高々一つの IPC ファイル記述子を持ちます。\nこのオプションを設定すると、ChildProcess.send()
メソッドが有効になります。\n子プロセスがこのファイル記述子に JSON メッセージを書き込むと、\nそれは ChildProcess.on('message')
を引き起こします。\n子プロセスが Node.js プログラムなら、IPC チャネルの存在は process.send()
\nおよび process.on('message')
を有効にします。 \n'ignore'
- 子プロセスにファイル記述子を設定しません。\nNode は子プロセスを起動する際、常に fd 0~2 をオープンすることに\n注意してください。これらのうちのどれかが 'ignore'
の場合、node は\n/dev/null
をオープンして、それを子プロセスの fd に割り当てます。 \nStream
オブジェクト - tty、ファイル、ソケット、またはパイプを参照する\n読み込みまたは書き込み可能なストリームを子プロセスと共有します。\nストリームの下層にあるファイル記述子は、子プロセスの stdio
配列の\n対応する位置にコピーされます。\nストリームは下層のファイル記述を持っていなければならないことに\n注意してください (ファイルストリームは 'open'
イベントが発生するまで\nそれを持ちません)。 \n- 非負整数 - 整数の値を親プロセスが現在オープンしているファイル記述子として\n解釈されます。\nそれは
Stream
オブジェクトの場合と同様に子プロセスに共有されます。 \nnull
、undefined
- デフォルト値を使用します。\nstdio
の fd
が 0、1、または 2 (言い換えると stdin、stdout、または\nstderr) の場合はパイプが作成されます。fd が 3 以上の場合、デフォルトは\n'ignore'
です。 \n
\n\n\n簡易な記法として、stdio
に配列ではなく以下の文字列の一つを指定することも\nできます。\n\n
\n\n\n\nignore
- ['ignore', 'ignore', 'ignore']
\npipe
- ['pipe', 'pipe', 'pipe']
\ninherit
- [process.stdin, process.stdout, process.stderr]
または [0,1,2]
\n
\n\n\n例:\n\n
\nvar spawn = require('child_process').spawn;\n\n// Child will use parent's stdios\nspawn('prg', [], { stdio: 'inherit' });\n\n// Spawn child sharing only stderr\nspawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });\n\n// Open an extra fd=4, to interact with programs present a\n// startd-style interface.\nspawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });
\n\n\ndetached
オプションが設定されると、子プロセスは新しいプロセスグループの\nリーダになります。\nこれは親プロセスが終了しても子プロセスの実行が継続することを可能にします。\n\n
\n\n\nデフォルトでは、親プロセスは切り離された子プロセスの終了を待機します。\n親プロセスが child
を待機することを防ぐには、child.unref()
メソッドを\n使用し、親のイベントループに子のリファレンスカウントが含まれないようにします。\n\n
\n\n\n長時間実行する子プロセスを切り離し、出力をファイルにリダイレクトする例:\n\n
\n var fs = require('fs'),\n spawn = require('child_process').spawn,\n out = fs.openSync('./out.log', 'a'),\n err = fs.openSync('./out.log', 'a');\n\n var child = spawn('prg', [], {\n detached: true,\n stdio: [ 'ignore', out, err ]\n });\n\n child.unref();
\n\n\n長時間実行されるプロセスを開始するために detached
オプションを使用する場合、\nその stdio
が親と接続するような構成を与えられない限り、そのプロセスは\nバックグラウンドにとどまりません。\n親の stdio
が継承されるなら、子プロセスは制御しているターミナルに\n接続されたままです。\n\n
\n\n\n指定のファイル記述子を子プロセスの標準入出力に指定することを可能にする、\ncustomFds
と呼ばれる廃止されたオプションがありました。\nこの API は全てのプラットフォームに移植可能ではないために削除されました。\ncustomFds
は新しいプロセスの [stdin, stdout, stderr]
を既存のストリームに接続することを可能にしました;\n-1
は新しいストリームが作られなければならないことを意味していました。\n使用する場合は自己責任で。\n\n
\n関連項目: child_process.exec()
および child_process.fork()
\n\n
\n",
"signatures": [
{
"params": [
@@ -199,7 +199,7 @@
]
},
{
- "textRaw": "child_process.execFile(file, args, options, callback)",
+ "textRaw": "child_process.execFile(file, [args], [options], [callback])",
"type": "method",
"name": "execFile",
"desc": "\n\n\nfile
{String} 実行するプログラムのファイル名 \nargs
{Array} 文字列による引数の配列 \noptions
{Object}\ncwd
{String} 子プロセスのカレントワーキングディレクトリ \nenv
{Object} 環境変数として与えるキー・値のペア \nencoding
{String} (Default: 'utf8') \ntimeout
{Number} (Default: 0) \nmaxBuffer
{Number} (Default: 200*1024) \nkillSignal
{String} (Default: 'SIGTERM') \n
\n \ncallback
{Function} プロセスが終了するとその出力を伴って呼び出されます\nerror
{Error} \nstdout
{Buffer} \nstderr
{Buffer} \n
\n \n- Return: ChildProcess object
\n
\n\n\n子シェルで実行する代わりに指定されたファイルを直接実行することを除いて\nchild_process.exec()
と同様です。\nこれは child_process.exec
より若干効率的で、同じオプションを持ちます。\n\n\n
\n",
@@ -210,13 +210,16 @@
"name": "file"
},
{
- "name": "args"
+ "name": "args",
+ "optional": true
},
{
- "name": "options"
+ "name": "options",
+ "optional": true
},
{
- "name": "callback"
+ "name": "callback",
+ "optional": true
}
]
}
@@ -226,7 +229,7 @@
"textRaw": "child_process.fork(modulePath, [args], [options])",
"type": "method",
"name": "fork",
- "desc": "\n\n\nmodulePath
{String} 子プロセスで実行するモジュール \nargs
{Array} 文字列による引数の配列 \noptions
{Object}\ncwd
{String} 子プロセスのカレントワーキングディレクトリ \nenv
{Object} 環境変数として与えるキー・値のペア \nencoding
{String} (デフォルト: 'utf8') \nexecPath
{String} 子プロセスの作成に使われる実行ファイル \nexecArgv
{Array} 実行ファイルに渡される引数を表す文字列の配列\n(デフォルトは process.execArgv
)。 \nsilent
{Boolean} true
の場合、起動された子プロセスの標準入力と標準出力が\n親プロセスに関連づけられるのを抑止します (デフォルトは false
)。 \n
\n \n- Return: ChildProcess object
\n
\n\n\nこれは spawn()
の特別版で、Node プロセスを起動します。\n返されるオブジェクトは通常の ChildProcess の全てのメソッドに加えて、\n組み込みの通信チャネルを持ちます。\n詳細は child.send(message, [sendHandle])
を参照してください。\n\n
\n\n\nこれらの子 Node は、やはり V8 の新しいインスタンスです。\n新しい Node ごとに少なくとも 30 ミリ秒の起動時間と \n10MB のメモリを前提としてください。\nつまり、数千の子プロセスを作ることは出来ません。\n\n
\n\n\noptions
オブジェクト中の execPath
プロパティは、\n現在の node
実行ファイルではない子プロセスの作成を可能にします。\nデフォルトでは、子プロセスの環境変数 NODE_CHANNEL_FD
によって示される\nファイル記述子を通じて対話することに注意しなければなりません。\nこのファイル記述子における入力と出力は、改行で区切られた JSON オブジェクトです。\n\n
\n",
+ "desc": "\n\n\nmodulePath
{String} 子プロセスで実行するモジュール \nargs
{Array} 文字列による引数の配列 \noptions
{Object}\ncwd
{String} 子プロセスのカレントワーキングディレクトリ \nenv
{Object} 環境変数として与えるキー・値のペア \nencoding
{String} (デフォルト: 'utf8') \nexecPath
{String} 子プロセスの作成に使われる実行ファイル \nexecArgv
{Array} 実行ファイルに渡される引数を表す文字列の配列\n(デフォルトは process.execArgv
)。 \nsilent
{Boolean} true
の場合、子プロセスの標準入力、標準出力、\n標準エラー出力は親プロセスにパイプされます。\nそうでない場合は親プロセスから継承します。\nより詳細は spawn()
の pipe
および inherit
オプションを参照してください\n(デフォルトは false
)。 \n
\n \n- Return: ChildProcess object
\n
\n\n\nこれは spawn()
の特別版で、Node プロセスを起動します。\n返されるオブジェクトは通常の ChildProcess の全てのメソッドに加えて、\n組み込みの通信チャネルを持ちます。\n詳細は child.send(message, [sendHandle])
を参照してください。\n\n
\n\n\nこれらの子 Node は、やはり V8 の新しいインスタンスです。\n新しい Node ごとに少なくとも 30 ミリ秒の起動時間と \n10MB のメモリを前提としてください。\nつまり、数千の子プロセスを作ることは出来ません。\n\n
\n\n\noptions
オブジェクト中の execPath
プロパティは、\n現在の node
実行ファイルではない子プロセスの作成を可能にします。\nデフォルトでは、子プロセスの環境変数 NODE_CHANNEL_FD
によって示される\nファイル記述子を通じて対話することに注意しなければなりません。\nこのファイル記述子における入力と出力は、改行で区切られた JSON オブジェクトです。\n\n
\n",
"signatures": [
{
"params": [
diff --git a/api/cluster.html b/api/cluster.html
index 94487ae..fa0e713 100644
--- a/api/cluster.html
+++ b/api/cluster.html
@@ -2,7 +2,7 @@
- Cluster Node.js v0.11.10 Manual & Documentation
+ Cluster Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -420,7 +420,7 @@
Event: 'fork'@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/cluster.json b/api/cluster.json
index cc75b4a..387f52b 100644
--- a/api/cluster.json
+++ b/api/cluster.json
@@ -80,7 +80,7 @@
"type": "event",
"name": "fork",
"params": [],
- "desc": "\n\n新しいワーカがフォークされると、クラスタモジュールは 'fork'
イベントを\n生成します。\nこれはワーカの活動をロギングしたり、タイムアウトのために使うことができます。\n\n
\nvar timeouts = [];\nfunction errorMsg() {\n console.error("Something must be wrong with the connection ...");\n}\n\ncluster.on('fork', function(worker) {\n timeouts[worker.id] = setTimeout(errorMsg, 2000);\n});\ncluster.on('listening', function(worker, address) {\n clearTimeout(timeouts[worker.id]);\n});\ncluster.on('exit', function(worker, code, signal) {\n clearTimeout(timeouts[worker.id]);\n errorMsg();\n});
\n"
+ "desc": "\n\n新しいワーカがフォークされると、クラスタモジュールは 'fork'
イベントを\n生成します。\nこれはワーカの活動をロギングしたり、タイムアウトのために使うことができます。\n\n
\nvar timeouts = [];\nfunction errorMsg() {\n console.error("Something must be wrong with the connection ...");\n}\n\ncluster.on('fork', function(worker) {\n timeouts[worker.id] = setTimeout(errorMsg, 2000);\n});\ncluster.on('listening', function(worker, address) {\n clearTimeout(timeouts[worker.id]);\n});\ncluster.on('exit', function(worker, code, signal) {\n clearTimeout(timeouts[worker.id]);\n errorMsg();\n});
\n"
},
{
"textRaw": "Event: 'online'",
diff --git a/api/console.html b/api/console.html
index 9f897ee..24c1a0d 100644
--- a/api/console.html
+++ b/api/console.html
@@ -2,7 +2,7 @@
- console Node.js v0.11.10 Manual & Documentation
+ console Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -242,7 +242,7 @@
console.assert(expression, [message])@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/crypto.html b/api/crypto.html
index 109e990..506c7ac 100644
--- a/api/crypto.html
+++ b/api/crypto.html
@@ -2,7 +2,7 @@
- Crypto Node.js v0.11.10 Manual & Documentation
+ Crypto Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -56,6 +56,7 @@
Node.js v0.11.10 マニュアル & ドキュメンテーション
Table of Contents
- Crypto
+- crypto.setEngine(engine, [flags])
- crypto.getCiphers()
- crypto.getHashes()
- crypto.createCredentials(details)
@@ -115,8 +116,8 @@ Table of Contents
- crypto.getDiffieHellman(group_name)
-- crypto.pbkdf2(password, salt, iterations, keylen, callback)
-- crypto.pbkdf2Sync(password, salt, iterations, keylen)
+- crypto.pbkdf2(password, salt, iterations, keylen, [digest], callback)
+- crypto.pbkdf2Sync(password, salt, iterations, keylen, [digest])
- crypto.randomBytes(size, [callback])
- crypto.pseudoRandomBytes(size, [callback])
- Class: Certificate
@@ -168,6 +169,47 @@ Crypto#
+crypto.setEngine(engine, [flags])#
+
+
+一部または全ての OpenSSL 関数のために、エンジンをロードまたは設定します
+(フラグによって選択されます)。
+
+
+
+
+engine
は id か、エンジンの共有ライブラリへのパスかのいずれかです。
+
+
+
+
+flags
はオプションで、デフォルトは ENGINE_METHOD_ALL
です。
+以下のフラグから一つまたは組み合わせを指定することが出来ます
+(constants
モジュールに定義されています)。
+
+
+
+ENGINE_METHOD_RSA
+ENGINE_METHOD_DSA
+ENGINE_METHOD_DH
+ENGINE_METHOD_RAND
+ENGINE_METHOD_ECDH
+ENGINE_METHOD_ECDSA
+ENGINE_METHOD_CIPHERS
+ENGINE_METHOD_DIGESTS
+ENGINE_METHOD_STORE
+ENGINE_METHOD_PKEY_METH
+ENGINE_METHOD_PKEY_ASN1_METH
+ENGINE_METHOD_ALL
+ENGINE_METHOD_NONE
+
crypto.getCiphers()#
+
+非同期の PBKDF2 関数です。
+選択された HMAC ダイジェスト関数 (デフォルト: SHA1) を適用して、
+要求されたパスワード、salt、および繰り返しの数から、
+指定された長さの鍵を生成します。
+コールバック関数は二つの引数を受け取ります: (err, derivedKey)
+
+
+
+
+例:
+
+
+crypto.pbkdf2('secret', 'salt', 4096, 512, 'sha256', function(err, key) {
+ if (err)
+ throw err;
+ console.log(key.toString('hex')); // 'c5e478d...1469e50'
+});
-疑似乱数を HMAC-SHA1 関数に適用して、与えられたパスワードと salt
-(ランダムなバイト値)、および繰り返しから、指定された長さの鍵を生成する、
-非同期の PBKDF2 です。
-コールバック関数は二つの引数を受け取る (err, derivedKey)
です。
+
crypto.getHashes() からサポートされる
+ダイジェスト関数の一覧を得ることが出来ます。
-crypto.pbkdf2Sync(password, salt, iterations, keylen)#
+crypto.pbkdf2Sync(password, salt, iterations, keylen, [digest])#
@@ -1384,7 +1449,7 @@ Recent API Changes@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/crypto.json b/api/crypto.json
index e697e1a..6673d6c 100644
--- a/api/crypto.json
+++ b/api/crypto.json
@@ -6,6 +6,25 @@
"name": "crypto",
"desc": "\n\nStability: 2 - Unstable; 将来のバージョンにおいて API の変更が\n議論されています。互換性を損なう変更は最小限になる予定です。\n後述します。
\n\n\nこのモジュールにアクセスするには require('crypto')
を使用します。\n\n
\n\n\n暗号化モジュールは安全な HTTPS ネットワークや http\nコネクションの一部として使われる、\n安全な認証情報をカプセル化する方法を提供します。\n\n
\n\n\n同時に OpenSSL のハッシュ、HMAC、暗号、復号、署名、そして検証へのラッパーを一式提供します。\n\n\n
\n",
"methods": [
+ {
+ "textRaw": "crypto.setEngine(engine, [flags])",
+ "type": "method",
+ "name": "setEngine",
+ "desc": "\n\n一部または全ての OpenSSL 関数のために、エンジンをロードまたは設定します\n(フラグによって選択されます)。\n\n
\n\n\nengine
は id か、エンジンの共有ライブラリへのパスかのいずれかです。\n\n
\n\n\nflags
はオプションで、デフォルトは ENGINE_METHOD_ALL
です。\n以下のフラグから一つまたは組み合わせを指定することが出来ます\n(constants
モジュールに定義されています)。\n\n
\n\nENGINE_METHOD_RSA
\nENGINE_METHOD_DSA
\nENGINE_METHOD_DH
\nENGINE_METHOD_RAND
\nENGINE_METHOD_ECDH
\nENGINE_METHOD_ECDSA
\nENGINE_METHOD_CIPHERS
\nENGINE_METHOD_DIGESTS
\nENGINE_METHOD_STORE
\nENGINE_METHOD_PKEY_METH
\nENGINE_METHOD_PKEY_ASN1_METH
\nENGINE_METHOD_ALL
\nENGINE_METHOD_NONE
\n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "engine"
+ },
+ {
+ "name": "flags",
+ "optional": true
+ }
+ ]
+ }
+ ]
+ },
{
"textRaw": "crypto.getCiphers()",
"type": "method",
@@ -234,10 +253,10 @@
]
},
{
- "textRaw": "crypto.pbkdf2(password, salt, iterations, keylen, callback)",
+ "textRaw": "crypto.pbkdf2(password, salt, iterations, keylen, [digest], callback)",
"type": "method",
"name": "pbkdf2",
- "desc": "\n\n疑似乱数を HMAC-SHA1 関数に適用して、与えられたパスワードと salt \n(ランダムなバイト値)、および繰り返しから、指定された長さの鍵を生成する、\n非同期の PBKDF2 です。\nコールバック関数は二つの引数を受け取る (err, derivedKey)
です。\n\n
\n",
+ "desc": "\n\n非同期の PBKDF2 関数です。\n選択された HMAC ダイジェスト関数 (デフォルト: SHA1) を適用して、\n要求されたパスワード、salt、および繰り返しの数から、\n指定された長さの鍵を生成します。\nコールバック関数は二つの引数を受け取ります: (err, derivedKey)
\n\n
\n\n\n例:\n\n
\ncrypto.pbkdf2('secret', 'salt', 4096, 512, 'sha256', function(err, key) {\n if (err)\n throw err;\n console.log(key.toString('hex')); // 'c5e478d...1469e50'\n});
\n\n\ncrypto.getHashes() からサポートされる\nダイジェスト関数の一覧を得ることが出来ます。\n\n
\n",
"signatures": [
{
"params": [
@@ -253,6 +272,10 @@
{
"name": "keylen"
},
+ {
+ "name": "digest",
+ "optional": true
+ },
{
"name": "callback"
}
@@ -261,7 +284,7 @@
]
},
{
- "textRaw": "crypto.pbkdf2Sync(password, salt, iterations, keylen)",
+ "textRaw": "crypto.pbkdf2Sync(password, salt, iterations, keylen, [digest])",
"type": "method",
"name": "pbkdf2Sync",
"desc": "\n\n同期版の PBKDF2 関数。\n生成された鍵を返すか、例外をスローします。\n\n
\n",
@@ -279,6 +302,10 @@
},
{
"name": "keylen"
+ },
+ {
+ "name": "digest",
+ "optional": true
}
]
}
diff --git a/api/debugger.html b/api/debugger.html
index 039ad14..5164519 100644
--- a/api/debugger.html
+++ b/api/debugger.html
@@ -2,7 +2,7 @@
- Debugger Node.js v0.11.10 Manual & Documentation
+ Debugger Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -371,7 +371,7 @@
Advanced Usage@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/dgram.html b/api/dgram.html
index 3735618..bbf213e 100644
--- a/api/dgram.html
+++ b/api/dgram.html
@@ -2,7 +2,7 @@
- UDP / Datagram Sockets Node.js v0.11.10 Manual & Documentation
+ UDP / Datagram Sockets Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -638,7 +638,7 @@
socket.ref()@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/dns.html b/api/dns.html
index cd240ed..6d37f8d 100644
--- a/api/dns.html
+++ b/api/dns.html
@@ -2,7 +2,7 @@
- DNS Node.js v0.11.10 Manual & Documentation
+ DNS Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -494,7 +494,7 @@
Error codes@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/documentation.html b/api/documentation.html
index 8d60763..9305c73 100644
--- a/api/documentation.html
+++ b/api/documentation.html
@@ -2,7 +2,7 @@
- About this Documentation Node.js v0.11.10 Manual & Documentation
+ About this Documentation Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -250,7 +250,7 @@
Stability Index@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/domain.html b/api/domain.html
index 81970ae..c1b199a 100644
--- a/api/domain.html
+++ b/api/domain.html
@@ -2,7 +2,7 @@
- Domain Node.js v0.11.10 Manual & Documentation
+ Domain Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -855,7 +855,7 @@
domain.dispose()@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/events.html b/api/events.html
index d575f98..5f6f1b9 100644
--- a/api/events.html
+++ b/api/events.html
@@ -2,7 +2,7 @@
- Events Node.js v0.11.10 Manual & Documentation
+ Events Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -369,7 +369,7 @@
Event: 'removeListener'@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/fs.html b/api/fs.html
index 02c3eb0..7d62098 100644
--- a/api/fs.html
+++ b/api/fs.html
@@ -2,7 +2,7 @@
- File System Node.js v0.11.10 Manual & Documentation
+ File System Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -1894,7 +1894,7 @@
Event: 'error'@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/globals.html b/api/globals.html
index 7eca0cb..9f5a574 100644
--- a/api/globals.html
+++ b/api/globals.html
@@ -2,7 +2,7 @@
- Global Objects Node.js v0.11.10 Manual & Documentation
+ Global Objects Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -492,7 +492,7 @@
clearInterval(t)@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/http.html b/api/http.html
index 8cf6bb1..e6d5ead 100644
--- a/api/http.html
+++ b/api/http.html
@@ -2,7 +2,7 @@
- HTTP Node.js v0.11.10 Manual & Documentation
+ HTTP Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -2230,7 +2230,7 @@
message.socket@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/https.html b/api/https.html
index d0fecc8..7f472b2 100644
--- a/api/https.html
+++ b/api/https.html
@@ -2,7 +2,7 @@
- HTTPS Node.js v0.11.10 Manual & Documentation
+ HTTPS Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -467,7 +467,7 @@
https.globalAgent@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/index.html b/api/index.html
index 820122c..e073248 100644
--- a/api/index.html
+++ b/api/index.html
@@ -2,7 +2,7 @@
- Node.js v0.11.10 Manual & Documentation
+ Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -131,7 +131,7 @@
Table of Contents
@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/modules.html b/api/modules.html
index ed814d1..678450a 100644
--- a/api/modules.html
+++ b/api/modules.html
@@ -2,7 +2,7 @@
- Modules Node.js v0.11.10 Manual & Documentation
+ Modules Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -992,7 +992,7 @@
Addenda: Package Manager Tips@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/net.html b/api/net.html
index a77e9e1..7425ff2 100644
--- a/api/net.html
+++ b/api/net.html
@@ -2,7 +2,7 @@
- net Node.js v0.11.10 Manual & Documentation
+ net Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -1311,7 +1311,7 @@
net.isIPv6(input)@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/os.html b/api/os.html
index 53503e9..e0334ce 100644
--- a/api/os.html
+++ b/api/os.html
@@ -2,7 +2,7 @@
- os Node.js v0.11.10 Manual & Documentation
+ os Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -351,7 +351,7 @@
os.EOL#@nodejs
-
Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/path.html b/api/path.html
index 04ca925..8b6a9d4 100644
--- a/api/path.html
+++ b/api/path.html
@@ -2,7 +2,7 @@
- Path Node.js v0.11.10 Manual & Documentation
+ Path Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -448,7 +448,7 @@
path.delimiter@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/process.html b/api/process.html
index c7a1279..70f6f0c 100644
--- a/api/process.html
+++ b/api/process.html
@@ -2,7 +2,7 @@
- process Node.js v0.11.10 Manual & Documentation
+ process Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -93,8 +93,8 @@
Table of Contents
process.uptime()
process.hrtime()
Async Listeners
-process.createAsyncListener(asyncListener[, callbacksObj[, storageValue]])
-process.addAsyncListener(asyncListener[, callbacksObj[, storageValue]])
+process.createAsyncListener(callbacksObj[, userData])
+process.addAsyncListener(callbacksObj[, userData])
process.addAsyncListener(asyncListener)
process.removeAsyncListener(asyncListener)
@@ -374,9 +374,9 @@ Signal Events#
プロセスにシグナルを送ります。
pid
はプロセス ID で signal
は送信されるシグナルを文字列で記述したものです。
シグナルの名前は 'SIGINT'
や 'SIGHUP'
のような文字列です。
省略すると、シグナルは 'SIGTERM'
となります。
-詳細は kill(2) を参照してください。
+詳細は Signal Events および
+kill(2) を参照してください。
AsyncListener
API は、開発者が非同期イベントの有効期間中に
@@ -1326,23 +1344,17 @@
Async Listeners#
+process.createAsyncListener(callbacksObj[, userData])#
-asyncListener
{Function} 非同期イベントが生成されると呼び出される
-コールバック。
-callbacksObj
{Object} 非同期イベントの有効期間中に、指定された回数だけ
-呼び出されるオプションのコールバック。
-storageValue
{Value} asyncListener
とそれに続くコールバックが
-実行される時、最初の引数として渡される値。
+callbacksObj
{Object} 非同期イベントのライフサイクル中に、
+指定された回数だけ呼び出されるオプションのコールバックを含むオブジェクト。
+userData
{Value} 全てのコールバックに渡される値。
非同期イベントを捉えるには、process.addAsyncListener()
に
-このオブジェクトを渡してください。
+callbacksObj
か既存の AsyncListener
インスタンスのいずれかを渡してください。
同じ AsyncListener
インスタンスは一度だけアクティブなキューに加えられます。
それ以降、インスタンスの追加を試みても無視されます。
-イベントの捕捉を止めるには、このオブジェクトを
+
イベントの捕捉を止めるには、AsyncListener
インスタンスを
process.removeAsyncListener()
に渡してください。
それは以前に加えられた AsyncListener
がコールバックされなくなることを
意味 しません。
@@ -1385,95 +1398,98 @@
process.createAsyncListener(asyncListener[, callbacksObj[, storageValue]])関数のパラメータの説明:
+
+
+
+
+
callbacksObj
: オプションのフィールドを3つ持つことができる Object
です。
+
-asyncListener(storageValue)
: 非同期イベントが生成された時に呼び出される関数。
+
+create(userData)
: 非同期イベントが生成された時に呼び出される関数。
関数がもし Value
を返すなら、それはイベントに割り当てられ、
process.createAsyncListener()
の storageValue
引数に渡された値を
上書きします。
作成時に storageValue
の初期値が渡されていた場合、asyncListener()
は
-関数の引数としてそれを受け取ります。
-
-
-
-
-callbacksObj
: オプションのフィールドを3つ持つことができる Object
です。
-
-
+関数の引数としてそれを受け取ります。
+
-before(context, storageValue)
: 非同期コールバックが実行される前に
+before(context, userData)
: 非同期コールバックが実行される前に
呼び出される関数です。
それは呼び出される関数の context
(すなわち this
) と、
asyncListener
の戻り値または構築時に渡された値 (両方の場合) のどちらかが
storageValue
として渡されます。
-after(context, storageValue)
: 非同期イベントのコールバックが実行された後で
+after(context, userData)
: 非同期イベントのコールバックが実行された後で
呼び出される関数です。
コールバックがエラーをスローしてそれが処理されなければ、
これは呼び出されないことに注意してください。
-error(storageValue, error)
: イベントのコールバックがスローすると
+error(userData, error)
: イベントのコールバックがスローすると
呼び出されます。
-もし error()
が true
を返すと、Node はエラーが正しく処理されたと見なし、
+もし登録された関数が true
を返すと、Node はエラーが正しく処理されたと見なし、
正常に実行を再開します。
複数の error()
が登録されている場合、エラーが処理されたと AsyncListener
に
-認められるには、一つ だけでもコールバックが true
を返す必要があります。
+認められるには、一つ だけでもコールバックが true
を返す必要がありますが、
+全ての error()
コールバックは常に実行されます。
-storageValue
: デフォルトで、新しいイベントのインスタンスに割り当てられる値
-(つまり何でも)。asyncListener()
が返す値によって上書きされるかもしれません。
+userData
: デフォルトで、新しいイベントのインスタンスに割り当てられる値
+(つまり何でも)。create()
が返す値によって上書きされるかもしれません。
-storageValue
が上書きされる例です:
+
userData
が上書きされる例です:
-process.createAsyncListener(function listener(value) {
- // value === true
- return false;
+process.createAsyncListener({
+ create: function listener(value) {
+ // value === true
+ return false;
}, {
before: function before(context, value) {
// value === false
@@ -1481,19 +1497,19 @@ process.createAsyncListener(asyncListener[, callbacksObj[, storageValue]])
注意: EventEmitter は、非同期イベントを生成するために使われますが、
それ自身は非同期ではありません。
-そのため、イベントが加えられても asyncListener()
は呼び出されず、
+そのため、イベントが加えられても create()
は呼び出されず、
コールバックが呼び出されても before
/after
は呼び出されません。
-process.addAsyncListener(asyncListener[, callbacksObj[, storageValue]])#
+process.addAsyncListener(callbacksObj[, userData])#
process.addAsyncListener(asyncListener)#
-キューから AsyncLister
を削除することは、その実行スコープの間で
-呼ばれる非同期イベントによるコールバック呼び出しの中止を意味しません。
+
アクティブなキューから AsyncLister
を削除することは、
+登録されたイベントに対して asyncListener
コールバックの
+呼び出しが中断されることを意味 しません。
+その後、コールバックが実行される間に生成される全てのイベントも、
+将来の実行のために同じ asyncListener
に割り当てられます。
-var key = process.createAsyncListener(function asyncListener() {
- // To log we must stop listening or we'll enter infinite recursion.
- process.removeAsyncListener(key);
- console.log('You summoned me?');
- process.addAsyncListener(key);
+var fs = require('fs');
+
+var key = process.createAsyncListener({
+ create: function asyncListener() {
+ // Write directly to stdout or we'll enter a recursive loop
+ fs.writeSync(1, 'You summoned me?\n');
+ }
});
// We want to begin capturing async events some time in the future.
@@ -1629,11 +1647,13 @@ process.removeAsyncListener(asyncListener)@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/process.json b/api/process.json
index c3289c4..ad88de0 100644
--- a/api/process.json
+++ b/api/process.json
@@ -34,7 +34,7 @@
"textRaw": "Signal Events",
"name": "SIGINT, SIGHUP, etc.",
"type": "event",
- "desc": "\n\nプロセスがシグナルを受信した場合に生成されます。\nSIGINT、SIGHUP、その他の POSIX 標準シグナル名の一覧について は sigaction(2) を参照してください。\n\n
\n\n\nSIGINT
を監視する例:\n\n
\n// Start reading from stdin so we don't exit.\nprocess.stdin.resume();\n\nprocess.on('SIGINT', function() {\n console.log('Got SIGINT. Press Control-D to exit.');\n});
\n\n\n多くの端末プログラムで簡単に SIGINT
を送る方法は Control-C
を押すことです。\n\n
\n\n\n注意:\n\n
\n\n\n\nSIGUSR1
は Node.js がデバッガを起動するために予約されています。\nリスナを登録することは出来ますが、デバッガの起動を止めることは出来ません。 \nSIGTERM
および SIGINT
は、Windows 以外のプラットフォームでは\n128
+ シグナル番号で終了する前にターミナルのモードをリセットする\nデフォルトのハンドラを持ちます。\nこれらのシグナルのどちらかにリスナが登録されると、デフォルトの振る舞いは\n削除されます (node は終了しなくなります)。 \nSIGPIPE
はデフォルトでは無視され、リスナを登録することが出来ます。 \nSIGHUP
は Windows ではコンソールウィンドウが閉じられると発生します。\n他のプラットフォームでも同様の条件で発生します。詳細は signal(7)\nを参照してください。\nリスナを登録することは出来ますが、Windows では約 10 秒後に node は無条件に\nWindows によって終了されます。\nWindows 以外のプラットフォームでは、SIGHUP
のデフォルトの振る舞いは\nnodeを終了することですが、リスナを登録するとデフォルトの振る舞いは\n削除されます。 \nSIGTERM
は Windows ではサポートされません。\nしかし、リスナを登録することは可能です。 \nSIGINT
は全てのプラットフォームでサポートされ、通常 CTRL+C
\n(おそらく設定可能でしょう) によって生成されます。\nターミナルが raw モードの場合は生成されません。 \nSIGBREAK
は Windows において CTRL+BREAK
が推された時に送られます。\nWindows 以外のプラットフォームでもリスナを登録することは出来ますが、\nそれを生成したり送信する方法はありません。 \nSIGWINCH
はコンソールのサイズが変更された場合に送られます。\nWindows では、カーソルが移動するか、tty が raw モードの場合に、\nコンソールへ書き込むと発生します。 \nSIGKILL
のリスナを組み込むことは出来ません。\nそれは全てのプラットフォームで node を無条件に終了します。 \nSIGSTOP
のリスナを組み込むことは出来ません。 \n
\n",
+ "desc": "\n\nプロセスがシグナルを受信した場合に生成されます。\nSIGINT、SIGHUP、その他の POSIX 標準シグナル名の一覧について は sigaction(2) を参照してください。\n\n
\n\n\nSIGINT
を監視する例:\n\n
\n// Start reading from stdin so we don't exit.\nprocess.stdin.resume();\n\nprocess.on('SIGINT', function() {\n console.log('Got SIGINT. Press Control-D to exit.');\n});
\n\n\n多くの端末プログラムで簡単に SIGINT
を送る方法は Control-C
を押すことです。\n\n
\n\n\n注意:\n\n
\n\n\n\nSIGUSR1
は Node.js がデバッガを起動するために予約されています。\nリスナを登録することは出来ますが、デバッガの起動を止めることは出来ません。 \nSIGTERM
および SIGINT
は、Windows 以外のプラットフォームでは\n128
+ シグナル番号で終了する前にターミナルのモードをリセットする\nデフォルトのハンドラを持ちます。\nこれらのシグナルのどちらかにリスナが登録されると、デフォルトの振る舞いは\n削除されます (node は終了しなくなります)。 \nSIGPIPE
はデフォルトでは無視され、リスナを登録することが出来ます。 \nSIGHUP
は Windows ではコンソールウィンドウが閉じられると発生します。\n他のプラットフォームでも同様の条件で発生します。詳細は signal(7)\nを参照してください。\nリスナを登録することは出来ますが、Windows では約 10 秒後に node は無条件に\nWindows によって終了されます。\nWindows 以外のプラットフォームでは、SIGHUP
のデフォルトの振る舞いは\nnodeを終了することですが、リスナを登録するとデフォルトの振る舞いは\n削除されます。 \nSIGTERM
は Windows ではサポートされません。\nしかし、リスナを登録することは可能です。 \n- 端末からの
SIGINT
は全てのプラットフォームでサポートされ、通常 CTRL+C
\n(おそらく設定可能でしょう) によって生成されます。\nターミナルが raw モードの場合は生成されません。 \nSIGBREAK
は Windows において CTRL+BREAK
が推された時に送られます。\nWindows 以外のプラットフォームでもリスナを登録することは出来ますが、\nそれを生成したり送信する方法はありません。 \nSIGWINCH
はコンソールのサイズが変更された場合に送られます。\nWindows では、カーソルが移動するか、tty が raw モードの場合に、\nコンソールへ書き込むと発生します。 \nSIGKILL
のリスナを組み込むことは出来ません。\nそれは全てのプラットフォームで node を無条件に終了します。 \nSIGSTOP
のリスナを組み込むことは出来ません。 \n
\n\n\nWindows はシグナルの送信をサポートしていませんが、nodeはprocess.kill()
や\nchild_process.kill()
をエミュレートする方法を提供します:\n\n
\n\n- シグナル
0
は既存のプロセスを検索するためのものです。 \nSIGINT
、SIGTERM
、そして SIGKILL
は、ターゲットのプロセスが無条件に\n終了する原因となります。 \n
\n",
"params": []
}
],
@@ -269,7 +269,7 @@
"textRaw": "process.kill(pid, [signal])",
"type": "method",
"name": "kill",
- "desc": "\n\nプロセスにシグナルを送ります。\npid
はプロセス ID で signal
は送信されるシグナルを文字列で記述したものです。\nシグナルの名前は 'SIGINT'
や 'SIGHUP'
のような文字列です。\n省略すると、シグナルは 'SIGTERM'
となります。\n詳細は kill(2) を参照してください。\n\n
\n\n\n対象が存在しない場合はエラーがスローされます。\n特殊なケースとして、プロセスが存在することを確認するためにシグナル\n0
を使うことが出来ます。\n\n
\n\n\nこの関数の名前が process.kill
であるとおり、これは kill
\nシステムコールのように単にシグナルを送信することに注意してください。\n対象のプロセスを殺すためだけでなく、他のシグナルも送信できます。\n\n
\n\n\n自身にシグナルを送信する例:\n\n
\nprocess.on('SIGHUP', function() {\n console.log('Got SIGHUP signal.');\n});\n\nsetTimeout(function() {\n console.log('Exiting.');\n process.exit(0);\n}, 100);\n\nprocess.kill(process.pid, 'SIGHUP');
\n\n\n注意: SIGUSR1 が Node.js によって受け取られると、それはデバッガを起動します。\nSignal Events を参照してください。\n\n
\n",
+ "desc": "\n\nプロセスにシグナルを送ります。\npid
はプロセス ID で signal
は送信されるシグナルを文字列で記述したものです。\nシグナルの名前は 'SIGINT'
や 'SIGHUP'
のような文字列です。\n省略すると、シグナルは 'SIGTERM'
となります。\n詳細は Signal Events および\nkill(2) を参照してください。\n\n
\n\n\n対象が存在しない場合はエラーがスローされます。\n特殊なケースとして、プロセスが存在することを確認するためにシグナル\n0
を使うことが出来ます。\n\n
\n\n\nこの関数の名前が process.kill
であるとおり、これは kill
\nシステムコールのように単にシグナルを送信することに注意してください。\n対象のプロセスを殺すためだけでなく、他のシグナルも送信できます。\n\n
\n\n\n自身にシグナルを送信する例:\n\n
\nprocess.on('SIGHUP', function() {\n console.log('Got SIGHUP signal.');\n});\n\nsetTimeout(function() {\n console.log('Exiting.');\n process.exit(0);\n}, 100);\n\nprocess.kill(process.pid, 'SIGHUP');
\n\n\n注意: SIGUSR1 が Node.js によって受け取られると、それはデバッガを起動します。\nSignal Events を参照してください。\n\n
\n",
"signatures": [
{
"params": [
@@ -358,31 +358,28 @@
]
},
{
- "textRaw": "process.createAsyncListener(asyncListener[, callbacksObj[, storageValue]])",
+ "textRaw": "process.createAsyncListener(callbacksObj[, userData])",
"type": "method",
"name": "createAsyncListener",
- "desc": "\n\n\nasyncListener
{Function} 非同期イベントが生成されると呼び出される\nコールバック。 \ncallbacksObj
{Object} 非同期イベントの有効期間中に、指定された回数だけ\n呼び出されるオプションのコールバック。 \nstorageValue
{Value} asyncListener
とそれに続くコールバックが\n実行される時、最初の引数として渡される値。 \n
\n\n\n構築された AsyncListener
オブジェクトを返します。\n\n
\n\n\n非同期イベントを捉えるには、[process.addAsyncListener()
][] に\nこのオブジェクトを渡してください。\n同じ AsyncListener
インスタンスは一度だけアクティブなキューに加えられます。\nそれ以降、インスタンスの追加を試みても無視されます。\n\n
\n\n\nイベントの捕捉を止めるには、このオブジェクトを\n[process.removeAsyncListener()
][] に渡してください。\nそれは以前に加えられた AsyncListener
がコールバックされなくなることを\n意味 しません。\n一度非同期イベントに加えられると、それは非同期処理のコールスタックが有効な間、\n持続します。\n\n
\n\n\n関数のパラメータの説明:\n\n
\n\n\nasyncListener(storageValue)
: 非同期イベントが生成された時に呼び出される関数。\n関数がもし Value
を返すなら、それはイベントに割り当てられ、\nprocess.createAsyncListener()
の storageValue
引数に渡された値を\n上書きします。\n作成時に storageValue
の初期値が渡されていた場合、asyncListener()
は\n関数の引数としてそれを受け取ります。\n\n
\n\n\ncallbacksObj
: オプションのフィールドを3つ持つことができる Object
です。\n\n
\n\n\n\nbefore(context, storageValue)
: 非同期コールバックが実行される前に\n呼び出される関数です。\nそれは呼び出される関数の context
(すなわち this
) と、\nasyncListener
の戻り値または構築時に渡された値 (両方の場合) のどちらかが\nstorageValue
として渡されます。 \n
\n\n\n\nafter(context, storageValue)
: 非同期イベントのコールバックが実行された後で\n呼び出される関数です。\nコールバックがエラーをスローしてそれが処理されなければ、\nこれは呼び出されないことに注意してください。 \n
\n\n\n\nerror(storageValue, error)
: イベントのコールバックがスローすると\n呼び出されます。\nもし error()
が true
を返すと、Node はエラーが正しく処理されたと見なし、\n正常に実行を再開します。\n複数の error()
が登録されている場合、エラーが処理されたと AsyncListener
に\n認められるには、一つ だけでもコールバックが true
を返す必要があります。 \n
\n\n\n\nstorageValue
: デフォルトで、新しいイベントのインスタンスに割り当てられる値\n(つまり何でも)。asyncListener()
が返す値によって上書きされるかもしれません。 \n
\n\n\nstorageValue
が上書きされる例です:\n\n
\nprocess.createAsyncListener(function listener(value) {\n // value === true\n return false;\n}, {\n before: function before(context, value) {\n // value === false\n }\n}, true);
\n\n\n注意: [EventEmitter][] は、非同期イベントを生成するために使われますが、\nそれ自身は非同期ではありません。\nそのため、イベントが加えられても asyncListener()
は呼び出されず、\nコールバックが呼び出されても before
/after
は呼び出されません。\n\n\n
\n",
+ "desc": "\n\n\ncallbacksObj
{Object} 非同期イベントのライフサイクル中に、\n指定された回数だけ呼び出されるオプションのコールバックを含むオブジェクト。 \nuserData
{Value} 全てのコールバックに渡される値。 \n
\n\n\n構築された AsyncListener
オブジェクトを返します。\n\n
\n\n\n非同期イベントを捉えるには、[process.addAsyncListener()
][] に\ncallbacksObj
か既存の AsyncListener
インスタンスのいずれかを渡してください。\n同じ AsyncListener
インスタンスは一度だけアクティブなキューに加えられます。\nそれ以降、インスタンスの追加を試みても無視されます。\n\n
\n\n\nイベントの捕捉を止めるには、AsyncListener
インスタンスを\n[process.removeAsyncListener()
][] に渡してください。\nそれは以前に加えられた AsyncListener
がコールバックされなくなることを\n意味 しません。\n一度非同期イベントに加えられると、それは非同期処理のコールスタックが有効な間、\n持続します。\n\n
\n\n\n関数のパラメータの説明:\n\n\n
\n\n\ncallbacksObj
: オプションのフィールドを3つ持つことができる Object
です。\n\n
\n\n\n\ncreate(userData)
: 非同期イベントが生成された時に呼び出される関数。\n関数がもし Value
を返すなら、それはイベントに割り当てられ、\nprocess.createAsyncListener()
の storageValue
引数に渡された値を\n上書きします。\n作成時に storageValue
の初期値が渡されていた場合、asyncListener()
は\n関数の引数としてそれを受け取ります。 \n
\n\n\n\nbefore(context, userData)
: 非同期コールバックが実行される前に\n呼び出される関数です。\nそれは呼び出される関数の context
(すなわち this
) と、\nasyncListener
の戻り値または構築時に渡された値 (両方の場合) のどちらかが\nstorageValue
として渡されます。 \n
\n\n\n\nafter(context, userData)
: 非同期イベントのコールバックが実行された後で\n呼び出される関数です。\nコールバックがエラーをスローしてそれが処理されなければ、\nこれは呼び出されないことに注意してください。 \n
\n\n\n\nerror(userData, error)
: イベントのコールバックがスローすると\n呼び出されます。\nもし登録された関数が true
を返すと、Node はエラーが正しく処理されたと見なし、\n正常に実行を再開します。\n複数の error()
が登録されている場合、エラーが処理されたと AsyncListener
に\n認められるには、一つ だけでもコールバックが true
を返す必要がありますが、\n全ての error()
コールバックは常に実行されます。 \n
\n\n\n\nuserData
: デフォルトで、新しいイベントのインスタンスに割り当てられる値\n(つまり何でも)。create()
が返す値によって上書きされるかもしれません。 \n
\n\n\nuserData
が上書きされる例です:\n\n
\nprocess.createAsyncListener({\n create: function listener(value) {\n // value === true\n return false;\n}, {\n before: function before(context, value) {\n // value === false\n }\n}, true);
\n\n\n注意: [EventEmitter][] は、非同期イベントを生成するために使われますが、\nそれ自身は非同期ではありません。\nそのため、イベントが加えられても create()
は呼び出されず、\nコールバックが呼び出されても before
/after
は呼び出されません。\n\n\n
\n",
"signatures": [
{
"params": [
- {
- "name": "asyncListener["
- },
{
"name": "callbacksObj["
},
{
- "name": "storageValue"
+ "name": "userData"
}
]
}
]
},
{
- "textRaw": "process.addAsyncListener(asyncListener[, callbacksObj[, storageValue]])",
+ "textRaw": "process.addAsyncListener(callbacksObj[, userData])",
"type": "method",
"name": "addAsyncListener",
- "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar cntr = 0;\nvar key = process.addAsyncListener(function() {\n return { uid: cntr++ };\n}, {\n before: function onBefore(context, storage) {\n // Need to remove the listener while logging or will end up\n // with an infinite call loop.\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n after: function onAfter(context, storage) {\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'really, it\\'s ok') {\n process.removeAsyncListener(key);\n console.log('handled error just threw:');\n console.log(err.stack);\n process.addAsyncListener(key);\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('really, it\\'s ok');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
+ "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar fs = require('fs');\n\nvar cntr = 0;\nvar key = process.addAsyncListener({\n create: function onCreate() {\n return { uid: cntr++ };\n },\n before: function onBefore(context, storage) {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n after: function onAfter(context, storage) {\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'everything is fine') {\n fs.writeSync(1, 'handled error just threw:\\n');\n fs.writeSync(1, err.stack + '\\n');\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('everything is fine');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
"signatures": [
{
"params": [
@@ -393,14 +390,11 @@
},
{
"params": [
- {
- "name": "asyncListener["
- },
{
"name": "callbacksObj["
},
{
- "name": "storageValue"
+ "name": "userData"
}
]
}
@@ -410,7 +404,7 @@
"textRaw": "process.addAsyncListener(asyncListener)",
"type": "method",
"name": "addAsyncListener",
- "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar cntr = 0;\nvar key = process.addAsyncListener(function() {\n return { uid: cntr++ };\n}, {\n before: function onBefore(context, storage) {\n // Need to remove the listener while logging or will end up\n // with an infinite call loop.\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n after: function onAfter(context, storage) {\n process.removeAsyncListener(key);\n console.log('uid: %s is about to run', storage.uid);\n process.addAsyncListener(key);\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'really, it\\'s ok') {\n process.removeAsyncListener(key);\n console.log('handled error just threw:');\n console.log(err.stack);\n process.addAsyncListener(key);\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('really, it\\'s ok');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
+ "desc": "\n\nAsyncListener
オブジェクトを構築し、それを非同期イベントを捕捉するキューに\n加えて返します。\n\n
\n\n\n関数の引数は [process.createAsyncListener()
][] と同じか、\n構築された AsyncListener
オブジェクトです。\n\n
\n\n\nエラーを捕捉する例:\n\n
\nvar fs = require('fs');\n\nvar cntr = 0;\nvar key = process.addAsyncListener({\n create: function onCreate() {\n return { uid: cntr++ };\n },\n before: function onBefore(context, storage) {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n after: function onAfter(context, storage) {\n fs.writeSync(1, 'uid: ' + storage.uid + ' is about to run\\n');\n },\n error: function onError(storage, err) {\n // Handle known errors\n if (err.message === 'everything is fine') {\n fs.writeSync(1, 'handled error just threw:\\n');\n fs.writeSync(1, err.stack + '\\n');\n return true;\n }\n }\n});\n\nprocess.nextTick(function() {\n throw new Error('everything is fine');\n});\n\n// Output:\n// uid: 0 is about to run\n// handled error just threw:\n// Error: really, it's ok\n// at /tmp/test2.js:27:9\n// at process._tickCallback (node.js:583:11)\n// at Function.Module.runMain (module.js:492:11)\n// at startup (node.js:123:16)\n// at node.js:1012:3
\n",
"signatures": [
{
"params": [
@@ -425,7 +419,7 @@
"textRaw": "process.removeAsyncListener(asyncListener)",
"type": "method",
"name": "removeAsyncListener",
- "desc": "\n\nAsyncListener
を監視キューから削除します。\n\n
\n\n\nキューから AsyncLister
を削除することは、その実行スコープの間で\n呼ばれる非同期イベントによるコールバック呼び出しの中止を意味しません。\n\n
\nvar key = process.createAsyncListener(function asyncListener() {\n // To log we must stop listening or we'll enter infinite recursion.\n process.removeAsyncListener(key);\n console.log('You summoned me?');\n process.addAsyncListener(key);\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setTimeout(function() {\n setImmediate(function() {\n process.nextTick(function() { });\n });\n });\n\n // Removing the listener doesn't mean to stop capturing events that\n // have already been added.\n process.removeAsyncListener(key);\n}, 100);\n\n// Output:\n// You summoned me?\n// You summoned me?\n// You summoned me?\n// You summoned me?
\n\n\n4つの非同期イベントを記録したという事実は、Node の [Timers][] 実装の詳細を\n表しています。\n\n
\n\n\n非同期イベントの捕捉を特定のスタック上で止めたければ、\nprocess.removeAsyncListener()
はそのコールスタック自身で呼び出すべきです。\nたとえば:\n\n
\nvar key = process.createAsyncListener(function asyncListener() {\n // To log we must stop listening or we'll enter infinite recursion.\n process.removeAsyncListener(key);\n console.log('You summoned me?');\n process.addAsyncListener(key);\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setImmediate(function() {\n // Stop capturing from this call stack.\n process.removeAsyncListener(key);\n\n process.nextTick(function() { });\n });\n}, 100);\n\n// Output:\n// You summoned me?
\n\n\nユーザは削除したい AsyncListener
をいつでも明示的に渡すべきです。\nすべてのリスナを一度に削除することは出来ません。\n\n\n
\n",
+ "desc": "\n\nAsyncListener
を監視キューから削除します。\n\n
\n\n\nアクティブなキューから AsyncLister
を削除することは、\n登録されたイベントに対して asyncListener
コールバックの\n呼び出しが中断されることを意味 しません。\nその後、コールバックが実行される間に生成される全てのイベントも、\n将来の実行のために同じ asyncListener
に割り当てられます。\n\n
\nvar fs = require('fs');\n\nvar key = process.createAsyncListener({\n create: function asyncListener() {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'You summoned me?\\n');\n }\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setTimeout(function() {\n setImmediate(function() {\n process.nextTick(function() { });\n });\n });\n\n // Removing the listener doesn't mean to stop capturing events that\n // have already been added.\n process.removeAsyncListener(key);\n}, 100);\n\n// Output:\n// You summoned me?\n// You summoned me?\n// You summoned me?\n// You summoned me?
\n\n\n4つの非同期イベントを記録したという事実は、Node の [Timers][] 実装の詳細を\n表しています。\n\n
\n\n\n非同期イベントの捕捉を特定のスタック上で止めたければ、\nprocess.removeAsyncListener()
はそのコールスタック自身で呼び出すべきです。\nたとえば:\n\n
\nvar fs = require('fs');\n\nvar key = process.createAsyncListener({\n create: function asyncListener() {\n // Write directly to stdout or we'll enter a recursive loop\n fs.writeSync(1, 'You summoned me?\\n');\n }\n});\n\n// We want to begin capturing async events some time in the future.\nsetTimeout(function() {\n process.addAsyncListener(key);\n\n // Perform a few additional async events.\n setImmediate(function() {\n // Stop capturing from this call stack.\n process.removeAsyncListener(key);\n\n process.nextTick(function() { });\n });\n}, 100);\n\n// Output:\n// You summoned me?
\n\n\nユーザは削除したい AsyncListener
をいつでも明示的に渡すべきです。\nすべてのリスナを一度に削除することは出来ません。\n\n\n
\n",
"signatures": [
{
"params": [
@@ -446,7 +440,7 @@
"type": "misc",
"stability": 1,
"stabilityText": "Experimental",
- "desc": "\n\nAsyncListener
API は、開発者が非同期イベントの有効期間中に\nキーとなるイベントの通知を受け取ることを可能にする、\nAsyncWrap
クラスへの JavaScript インターフェースです。\nNode は内部的に多くの非同期イベントを扱うため、この API を使用することは\nアプリケーションのパフォーマンスに 重大な影響 を与えます。\n\n\n
\n"
+ "desc": "\n\nAsyncListener
API は、開発者が非同期イベントの有効期間中に\nキーとなるイベントの通知を受け取ることを可能にする、\nAsyncWrap
クラスへの JavaScript インターフェースです。\nNode は内部的に多くの非同期イベントを扱うため、この API を使用することは\nアプリケーションのパフォーマンスに 重大な影響 を与えます。\n\n\n
\n"
}
]
}
diff --git a/api/punycode.html b/api/punycode.html
index 3de86ec..cf4b742 100644
--- a/api/punycode.html
+++ b/api/punycode.html
@@ -2,7 +2,7 @@
- punycode Node.js v0.11.10 Manual & Documentation
+ punycode Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -204,7 +204,7 @@
punycode.version@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/querystring.html b/api/querystring.html
index ce0a34e..7151c4d 100644
--- a/api/querystring.html
+++ b/api/querystring.html
@@ -2,7 +2,7 @@
- Query String Node.js v0.11.10 Manual & Documentation
+ Query String Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -180,7 +180,7 @@
querystring.unescape@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/readline.html b/api/readline.html
index 239d582..d05a6e6 100644
--- a/api/readline.html
+++ b/api/readline.html
@@ -2,7 +2,7 @@
- Readline Node.js v0.11.10 Manual & Documentation
+ Readline Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -78,6 +78,10 @@
Table of Contents
Example: Tiny CLI
+readline.cursorTo(stream, x, y)
+readline.moveCursor(stream, dx, dy)
+readline.clearLine(stream, dir)
+readline.clearScreenDown(stream)
@@ -158,7 +162,7 @@ readline.createInterface(options)
+readline.cursorTo(stream, x, y)#
+
+
+カーソルを与えられた TTY スクリーンの指定の位置に移動します。
+
+
+readline.moveCursor(stream, dx, dy)#
+
+
+カーソルを与えられた TTY スクリーンの現在の位置からの相対位置に移動します。
+
+
+readline.clearLine(stream, dir)#
+
+
+与えられた TTY スクリーンの現在の行を指定された方向に消去します。
+dir
は以下の値のいずれか:
+
+
+
+
+
+-1
- カーソルから左方向
+1
- カーソルから右方向
+0
- 行全体
+
+readline.clearScreenDown(stream)#
+
+
+スクリーンのカーソルより下を消去します。
+
@@ -637,7 +685,7 @@ Example: Tiny CLI@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/readline.json b/api/readline.json
index b1f61ed..371ad12 100644
--- a/api/readline.json
+++ b/api/readline.json
@@ -12,7 +12,7 @@
"textRaw": "readline.createInterface(options)",
"type": "method",
"name": "createInterface",
- "desc": "\n\n行を読み込む Interface
のインスタンスを作成します。\n以下の値を含む options
オブジェクトを受け取ります。\n\n
\n\n\n\ninput
- 監視する入力ストリーム (必須)。
\n \noutput
- 読み込んだデータを書くための出力ストリーム (必須)。
\n \ncompleter
- タブによる自動補完のための関数 (オプション)。\n後述の例を参照してください。
\n \nterminal
- input
および output
ストリームが TTY デバイスで、\nANSI/VT100 エスケープコードを出力する場合は true
を渡します。\nデフォルトはインスタンス生成時に output
に対して\nisTTY
でチェックします。
\n \n
\n\n\ncompleter
関数にはユーザが入力した現在の行が与えられ、\n2 つのエントリを含む配列を返すことが期待されます:\n\n
\n\n\n\n補完によってマッチするエントリの配列。
\n \nマッチングに使用された部分文字列。
\n \n
\n\n\nそれは次のようになります:\n[[substr1, substr2, ...], originalsubstring]
。\n\n
\n\n\n例:\n\n
\nfunction completer(line) {\n var completions = '.help .error .exit .quit .q'.split(' ')\n var hits = completions.filter(function(c) { return c.indexOf(line) == 0 })\n // show all completions if none found\n return [hits.length ? hits : completions, line]\n}
\n\n\ncompleter
が二つの引数を持つなら、それは非同期モードで実行されます。\n\n
\nfunction completer(linePartial, callback) {\n callback(null, [['123'], linePartial]);\n}
\n\n\ncreateInterface
には通常、ユーザからの入力を受け取るために process.stdin
と\nprocess.stdout
が使用されます。\n\n
\nvar readline = require('readline');\nvar rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n});
\n\n\nreadline のインスタンスを作成すると、ほとんどの場合 'line'
イベントを\n監視することになります。\n\n
\n\n\nもしこのインスタンスの terminal
が true
の場合、\noutput
ストリームはもし outout.columns
プロパティが定義されていれば\nそれに適合し、カラム幅が変更されると output
上で\n'resize'
イベントが生成されます\n(process.stdout
が TTY の場合、それは自動的に行われます)。\n\n
\n",
+ "desc": "\n\n行を読み込む Interface
のインスタンスを作成します。\n以下の値を含む options
オブジェクトを受け取ります。\n\n
\n\n\n\ninput
- 監視する入力ストリーム (必須)。
\n \noutput
- 読み込んだデータを書くための出力ストリーム (必須)。
\n \ncompleter
- タブによる自動補完のための関数 (オプション)。\n後述の例を参照してください。
\n \nterminal
- input
および output
ストリームが TTY デバイスで、\nANSI/VT100 エスケープコードを出力する場合は true
を渡します。\nデフォルトはインスタンス生成時に output
に対して\nisTTY
でチェックします。
\n \n
\n\n\ncompleter
関数にはユーザが入力した現在の行が与えられ、\n2 つのエントリを含む配列を返すことが期待されます:\n\n
\n\n\n\n補完によってマッチするエントリの配列。
\n \nマッチングに使用された部分文字列。
\n \n
\n\n\nそれは次のようになります:\n[[substr1, substr2, ...], originalsubstring]
。\n\n
\n\n\n例:\n\n
\nfunction completer(line) {\n var completions = '.help .error .exit .quit .q'.split(' ')\n var hits = completions.filter(function(c) { return c.indexOf(line) == 0 })\n // show all completions if none found\n return [hits.length ? hits : completions, line]\n}
\n\n\ncompleter
が二つの引数を持つなら、それは非同期モードで実行されます。\n\n
\nfunction completer(linePartial, callback) {\n callback(null, [['123'], linePartial]);\n}
\n\n\ncreateInterface
には通常、ユーザからの入力を受け取るために process.stdin
と\nprocess.stdout
が使用されます。\n\n
\nvar readline = require('readline');\nvar rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n});
\n\n\nreadline のインスタンスを作成すると、ほとんどの場合 'line'
イベントを\n監視することになります。\n\n
\n\n\nもしこのインスタンスの terminal
が true
の場合、\noutput
ストリームはもし outout.columns
プロパティが定義されていれば\nそれに適合し、カラム幅が変更されると output
上で\n'resize'
イベントが生成されます\n(process.stdout
が TTY の場合、それは自動的に行われます)。\n\n
\n",
"signatures": [
{
"params": [
@@ -22,6 +22,81 @@
]
}
]
+ },
+ {
+ "textRaw": "readline.cursorTo(stream, x, y)",
+ "type": "method",
+ "name": "cursorTo",
+ "desc": "\n\nカーソルを与えられた TTY スクリーンの指定の位置に移動します。\n\n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "stream"
+ },
+ {
+ "name": "x"
+ },
+ {
+ "name": "y"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "textRaw": "readline.moveCursor(stream, dx, dy)",
+ "type": "method",
+ "name": "moveCursor",
+ "desc": "\n\nカーソルを与えられた TTY スクリーンの現在の位置からの相対位置に移動します。\n\n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "stream"
+ },
+ {
+ "name": "dx"
+ },
+ {
+ "name": "dy"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "textRaw": "readline.clearLine(stream, dir)",
+ "type": "method",
+ "name": "clearLine",
+ "desc": "\n\n与えられた TTY スクリーンの現在の行を指定された方向に消去します。\ndir
は以下の値のいずれか:\n\n
\n\n\n\n-1
- カーソルから左方向 \n1
- カーソルから右方向 \n0
- 行全体 \n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "stream"
+ },
+ {
+ "name": "dir"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "textRaw": "readline.clearScreenDown(stream)",
+ "type": "method",
+ "name": "clearScreenDown",
+ "desc": "\n\nスクリーンのカーソルより下を消去します。\n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "stream"
+ }
+ ]
+ }
+ ]
}
],
"classes": [
diff --git a/api/repl.html b/api/repl.html
index e09bb4c..cfe7a1b 100644
--- a/api/repl.html
+++ b/api/repl.html
@@ -2,7 +2,7 @@
- REPL Node.js v0.11.10 Manual & Documentation
+ REPL Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -475,7 +475,7 @@
REPL Features@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/smalloc.html b/api/smalloc.html
index 6d52efb..829f1ab 100644
--- a/api/smalloc.html
+++ b/api/smalloc.html
@@ -2,7 +2,7 @@
- Smalloc Node.js v0.11.10 Manual & Documentation
+ Smalloc Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -317,7 +317,7 @@
smalloc.Types@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/stream.html b/api/stream.html
index 5c3826b..e9f2212 100644
--- a/api/stream.html
+++ b/api/stream.html
@@ -2,7 +2,7 @@
- Stream Node.js v0.11.10 Manual & Documentation
+ Stream Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -1535,7 +1535,7 @@
Example: SimpleProtocol v1 (Sub-optimal)@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/stream.json b/api/stream.json
index 506ade8..42c52af 100644
--- a/api/stream.json
+++ b/api/stream.json
@@ -690,7 +690,7 @@
"textRaw": "Class: stream.Readable",
"type": "example",
"name": "stream.Readable",
- "desc": "\n\nstream.Readable
は抽象クラスで、下層の実装として [_read(size)
][]\nメソッドを実装することで拡張されるように設計されています。\n\n
\n\n\nプログラムの中で Readable ストリームを利用する方法については、\n前述の [ストリーム利用者のための API][] を参照してください。\nこの後に続くのは、あなたのプログラムの中で Readable ストリームを\n実装する方法の説明です。\n\n
\nExample: A Counting Stream
\n\n\nこれは Readable ストリームの基本的な例です。\nそれは 1 から 1,000,000 までの数を昇順で生成し、そして終了します。\n\n
\nvar Readable = require('stream').Readable;\nvar util = require('util');\nutil.inherits(Counter, Readable);\n\nfunction Counter(opt) {\n Readable.call(this, opt);\n this._max = 1000000;\n this._index = 1;\n}\n\nCounter.prototype._read = function() {\n var i = this._index++;\n if (i > this._max)\n this.push(null);\n else {\n var str = '' + i;\n var buf = new Buffer(str, 'ascii');\n this.push(buf);\n }\n};
\nExample: SimpleProtocol v1 (Sub-optimal)
\n\n\nこれは前に説明した parseHeader
関数とよく似ていますが、\n独自のストリームとして実装されています。\nまた、この実装は入ってくるデータを文字列に変換しないことに注意してください。\n\n
\n\n\nしかしながら、これは [Transform][] ストリームを使うことでよりうまく実装できます。\n後述のよりよい実装を参照してください。\n\n
\n// A parser for a simple data protocol.\n// The "header" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// NOTE: This can be done more simply as a Transform stream!\n// Using Readable directly for this is sub-optimal. See the\n// alternative example below under the Transform section.\n\nvar Readable = require('stream').Readable;\nvar util = require('util');\n\nutil.inherits(SimpleProtocol, Readable);\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\n// var parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.
\n",
+ "desc": "\n\nstream.Readable
は抽象クラスで、下層の実装として [_read(size)
][]\nメソッドを実装することで拡張されるように設計されています。\n\n
\n\n\nプログラムの中で Readable ストリームを利用する方法については、\n前述の [ストリーム利用者のための API][] を参照してください。\nこの後に続くのは、あなたのプログラムの中で Readable ストリームを\n実装する方法の説明です。\n\n
\nExample: A Counting Stream
\n\n\nこれは Readable ストリームの基本的な例です。\nそれは 1 から 1,000,000 までの数を昇順で生成し、そして終了します。\n\n
\nvar Readable = require('stream').Readable;\nvar util = require('util');\nutil.inherits(Counter, Readable);\n\nfunction Counter(opt) {\n Readable.call(this, opt);\n this._max = 1000000;\n this._index = 1;\n}\n\nCounter.prototype._read = function() {\n var i = this._index++;\n if (i > this._max)\n this.push(null);\n else {\n var str = '' + i;\n var buf = new Buffer(str, 'ascii');\n this.push(buf);\n }\n};
\nExample: SimpleProtocol v1 (Sub-optimal)
\n\n\nこれは前に説明した parseHeader
関数とよく似ていますが、\n独自のストリームとして実装されています。\nまた、この実装は入ってくるデータを文字列に変換しないことに注意してください。\n\n
\n\n\nしかしながら、これは [Transform][] ストリームを使うことでよりうまく実装できます。\n後述のよりよい実装を参照してください。\n\n
\n// A parser for a simple data protocol.\n// The "header" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// NOTE: This can be done more simply as a Transform stream!\n// Using Readable directly for this is sub-optimal. See the\n// alternative example below under the Transform section.\n\nvar Readable = require('stream').Readable;\nvar util = require('util');\n\nutil.inherits(SimpleProtocol, Readable);\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(source, options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\n// var parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.
\n",
"methods": [
{
"textRaw": "new stream.Readable([options])",
@@ -1031,7 +1031,7 @@
"textRaw": "Class: stream.Readable",
"type": "example",
"name": "stream.Readable",
- "desc": "\n\nstream.Readable
は抽象クラスで、下層の実装として [_read(size)
][]\nメソッドを実装することで拡張されるように設計されています。\n\n
\n\n\nプログラムの中で Readable ストリームを利用する方法については、\n前述の [ストリーム利用者のための API][] を参照してください。\nこの後に続くのは、あなたのプログラムの中で Readable ストリームを\n実装する方法の説明です。\n\n
\nExample: A Counting Stream
\n\n\nこれは Readable ストリームの基本的な例です。\nそれは 1 から 1,000,000 までの数を昇順で生成し、そして終了します。\n\n
\nvar Readable = require('stream').Readable;\nvar util = require('util');\nutil.inherits(Counter, Readable);\n\nfunction Counter(opt) {\n Readable.call(this, opt);\n this._max = 1000000;\n this._index = 1;\n}\n\nCounter.prototype._read = function() {\n var i = this._index++;\n if (i > this._max)\n this.push(null);\n else {\n var str = '' + i;\n var buf = new Buffer(str, 'ascii');\n this.push(buf);\n }\n};
\nExample: SimpleProtocol v1 (Sub-optimal)
\n\n\nこれは前に説明した parseHeader
関数とよく似ていますが、\n独自のストリームとして実装されています。\nまた、この実装は入ってくるデータを文字列に変換しないことに注意してください。\n\n
\n\n\nしかしながら、これは [Transform][] ストリームを使うことでよりうまく実装できます。\n後述のよりよい実装を参照してください。\n\n
\n// A parser for a simple data protocol.\n// The "header" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// NOTE: This can be done more simply as a Transform stream!\n// Using Readable directly for this is sub-optimal. See the\n// alternative example below under the Transform section.\n\nvar Readable = require('stream').Readable;\nvar util = require('util');\n\nutil.inherits(SimpleProtocol, Readable);\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\n// var parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.
\n",
+ "desc": "\n\nstream.Readable
は抽象クラスで、下層の実装として [_read(size)
][]\nメソッドを実装することで拡張されるように設計されています。\n\n
\n\n\nプログラムの中で Readable ストリームを利用する方法については、\n前述の [ストリーム利用者のための API][] を参照してください。\nこの後に続くのは、あなたのプログラムの中で Readable ストリームを\n実装する方法の説明です。\n\n
\nExample: A Counting Stream
\n\n\nこれは Readable ストリームの基本的な例です。\nそれは 1 から 1,000,000 までの数を昇順で生成し、そして終了します。\n\n
\nvar Readable = require('stream').Readable;\nvar util = require('util');\nutil.inherits(Counter, Readable);\n\nfunction Counter(opt) {\n Readable.call(this, opt);\n this._max = 1000000;\n this._index = 1;\n}\n\nCounter.prototype._read = function() {\n var i = this._index++;\n if (i > this._max)\n this.push(null);\n else {\n var str = '' + i;\n var buf = new Buffer(str, 'ascii');\n this.push(buf);\n }\n};
\nExample: SimpleProtocol v1 (Sub-optimal)
\n\n\nこれは前に説明した parseHeader
関数とよく似ていますが、\n独自のストリームとして実装されています。\nまた、この実装は入ってくるデータを文字列に変換しないことに注意してください。\n\n
\n\n\nしかしながら、これは [Transform][] ストリームを使うことでよりうまく実装できます。\n後述のよりよい実装を参照してください。\n\n
\n// A parser for a simple data protocol.\n// The "header" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// NOTE: This can be done more simply as a Transform stream!\n// Using Readable directly for this is sub-optimal. See the\n// alternative example below under the Transform section.\n\nvar Readable = require('stream').Readable;\nvar util = require('util');\n\nutil.inherits(SimpleProtocol, Readable);\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(source, options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\n// var parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.
\n",
"methods": [
{
"textRaw": "new stream.Readable([options])",
diff --git a/api/string_decoder.html b/api/string_decoder.html
index b6d22f9..458b730 100644
--- a/api/string_decoder.html
+++ b/api/string_decoder.html
@@ -2,7 +2,7 @@
- StringDecoder Node.js v0.11.10 Manual & Documentation
+ StringDecoder Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -141,7 +141,7 @@
decoder.end()@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/synopsis.html b/api/synopsis.html
index e685eb7..e3b624e 100644
--- a/api/synopsis.html
+++ b/api/synopsis.html
@@ -2,7 +2,7 @@
- Synopsis Node.js v0.11.10 Manual & Documentation
+ Synopsis Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -126,7 +126,7 @@
Synopsis@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/timers.html b/api/timers.html
index a8127af..d726cc8 100644
--- a/api/timers.html
+++ b/api/timers.html
@@ -2,7 +2,7 @@
- Timers Node.js v0.11.10 Manual & Documentation
+ Timers Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -238,7 +238,7 @@
clearImmediate(immediateId)@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/tls.html b/api/tls.html
index 7e69d84..fc09df7 100644
--- a/api/tls.html
+++ b/api/tls.html
@@ -2,7 +2,7 @@
- TLS (SSL) Node.js v0.11.10 Manual & Documentation
+ TLS (SSL) Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -58,6 +58,7 @@
Table of Contents
TLS (SSL)
- Client-initiated renegotiation attack mitigation
- NPN and SNI
+- Perfect Forward Secrecy
- tls.getCiphers()
- tls.createServer(options, [secureConnectionListener])
- tls.connect(options, [callback])
@@ -94,6 +95,7 @@ Table of Contents
- tlsSocket.getPeerCertificate()
- tlsSocket.getCipher()
- tlsSocket.renegotiate(options, callback)
+- tlsSocket.setMaxSendFragment(size)
- tlsSocket.address()
- tlsSocket.remoteAddress
- tlsSocket.remotePort
@@ -264,6 +266,65 @@ NPN and SNI#
+
+
+
+
+用語 "Forward Secrecy" あるいは "Perfect Forward Secrecy" とは、
+鍵を合意 (すなわち鍵交換) する方法の特徴を説明します。
+実際のところ、それは (あなたの) サーバの秘密鍵が漏洩しても、
+盗聴者によって解読される通信は、特定の各セッション毎に生成される
+鍵のペアを取得したものに限られることを意味します。
+
+
+
+
+これは、ハンドシェークの度にランダムに生成される鍵のペアによって
+鍵合意することで達成されます (全てのセッションで同じ鍵を使うのとは対照的です)。
+Perfect Forward Secrecy を提供するこの方法の実装は、
+「一時的 (ephemeral)」と呼ばれます。
+
+
+
+
+現在の所、Perfect Forward Secrecyとして2つの方法が一般的に使われています
+(従来の省略形に文字 "E" が負荷されていることに注意してください):
+
+
+
+
+
+
+
+鍵の生成は高価な処理であるため、「一時的」な方法はパフォーマンスの面で
+不利かもしれません。
+
+
+
tls.getCiphers()#
+
+最大の TLS フラグメントサイズを設定します (デフォルトおよび最大の値は 16384
、
+最少は 512
)。
+成功すれば true
、そうでなければ false
を返します。
+
+
+
+
+小さなフラグメントサイズは、クライアントでのバッファリングの遅延を減少します:
+大きなフラグメントは、全てのフラグメントが受信されてその完全性が確かめられるまで
+TLS 層によってバッファリングされます;
+大きなフラグメントは複数のラウンドトリップに分割され、
+パケットの喪失や並べ替えにより遅延が発生することがあります。
+しかしながら、小さなフラグメントは余分な TLS フレームのバイトと
+CPU のオーバーヘッドを加えるため、全体としてサーバのスループットを
+低下させるでしょう。
+
tlsSocket.address()#
@@ -1363,7 +1462,7 @@ tlsSocket.localPort@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/tls.json b/api/tls.json
index 7a627f6..487f9d7 100644
--- a/api/tls.json
+++ b/api/tls.json
@@ -19,6 +19,12 @@
"name": "NPN and SNI",
"type": "misc",
"desc": "\n\nNPN (Next Protocol Negotitation) と SNI (Server Name Indication) は\nTLS の拡張で、以下を可能にします。\n\n
\n\n- NPN - 一つの TLS サーバで複数のプロトコル (HTTP、SPDY) を使用。
\n- SNI - 一つの TLS サーバでホスト名の異なる複数の証明書を使用。
\n
\n"
+ },
+ {
+ "textRaw": "Perfect Forward Secrecy",
+ "name": "Perfect Forward Secrecy",
+ "type": "misc",
+ "desc": "\n\n用語 "[Forward Secrecy]" あるいは "Perfect Forward Secrecy" とは、\n鍵を合意 (すなわち鍵交換) する方法の特徴を説明します。\n実際のところ、それは (あなたの) サーバの秘密鍵が漏洩しても、\n盗聴者によって解読される通信は、特定の各セッション毎に生成される\n鍵のペアを取得したものに限られることを意味します。\n\n
\n\n\nこれは、ハンドシェークの度にランダムに生成される鍵のペアによって\n鍵合意することで達成されます (全てのセッションで同じ鍵を使うのとは対照的です)。\nPerfect Forward Secrecy を提供するこの方法の実装は、\n「一時的 (ephemeral)」と呼ばれます。\n\n
\n\n\n現在の所、Perfect Forward Secrecyとして2つの方法が一般的に使われています\n(従来の省略形に文字 "E" が負荷されていることに注意してください):\n\n
\n\n\n\n- [DHE] - ディフィー・ヘルマン鍵合意プロトコルの「一時的」版です。
\n- [ECDHE] - 楕円曲線ディフィー・ヘルマン鍵合意プロトコルの「一時的」版です。
\n
\n\n\n鍵の生成は高価な処理であるため、「一時的」な方法はパフォーマンスの面で\n不利かもしれません。\n\n\n
\n"
}
],
"methods": [
@@ -37,7 +43,7 @@
"textRaw": "tls.createServer(options, [secureConnectionListener])",
"type": "method",
"name": "createServer",
- "desc": "\n\n新しい [tls.Server][] を作成します。\nconnectionListener
は [secureConnection][] イベントのリスナとして\n自動的に登録されます。\noptions
は以下を持つことができます:\n\n\n
\n\n\n\npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、および CA の\n証明書を含む文字列またはバッファ\n(key
、cert
、および ca
オプションとは相互に排他的です)。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または Buffer
です\n(必須)。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です\n(必須)。
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \ncrl
: PEM でエンコードされた CRL (Certificate Revocation List、\n失効した証明書の一覧) の文字列または文字列の配列。
\n \nciphers
: 使用または除外する暗号を記述した文字列です。
\n[BEAST 攻撃]を抑制するために、このオプションと以下に示す honorCipherOrder
\nを共に使って、非 CBC 暗号を優先することを推奨します。
\nデフォルトは\nECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH
です。\n詳細は [OpenSSL 暗号リストフォーマットのドキュメント] を参照してください。
\nAES128-GCM-SHA256
は、Node.js が OpenSSL 1.0.1 以降とリンクされていて、\nクライアントが TLS 1.2 をサポートしている場合に使われます。\nRC4 は安全なフォールバックとして使われます。
\n注意: 以前のバージョンのこのセクションは AES256-SHA
を\n受け入れ可能な暗号であるかのように示していました。\n残念ながら、AES256-SHA
は CBC 暗号であり、したがって BEAST\n攻撃には弱いです。
\n \necdhCurve
: ECDH 暗号で使用する曲線を説明する名前、または全ての\nECDH 暗号を無効にする false
。
\nこれは ECDH (Elliptic Curve Diffie-Hellman) 暗号では必須です。\nECDH 暗号は RSA の新たな代替です。\nRSA を ECDH で置き換えるメリットは、[Forward secrecy] を提供することです。\nForward secrecy は、攻撃者があなたの秘密鍵を取得したとしても、\n彼らがそれ以前に取得したデータを解読出来ないことを意味します。
\nデフォルトは prime256v1
です。より詳細は [RFC 4492] を参照してください。
\n \nhandshakeTimeout
: SSL/TLS ハンドシェークがこの時間 (ミリ秒)\n以内に終了しなかった場合は接続をアボートします。\nデフォルトは 120 秒です。
\nハンドシェークがタイムアウトすると、tls.Server
オブジェクトで\n'clientError'
イベントが生成されます。
\n \nhonorCipherOrder
:\n暗号を選択する際に、クライアントではなくサーバの設定を使用します。
\nSSLv2 が使われる場合は、サーバは設定のリストをクライアントに送信し、\nクライアントが暗号を選択することに注意してください。
\nこのオプションはデフォルトでは無効ですが、BEAST 攻撃を抑制するために\nciphers
オプションと共に使用することを 推奨 します。
\n \nrequestCert
: true
の場合、サーバは接続しようとするクライアントからの\n証明書を要求します。デフォルトは false
です。
\n \nrejectUnauthorized
: true
の場合、サーバは提供された認証局の\nリストによって認証されていないコネクションを破棄します.\nこのオプションは requestCert
が true
の場合だけ効果があります。\nデフォルトは false
です。
\n \nNPNProtocols
: NPN プロトコルで使用可能な文字列または Buffer
の配列\n(プロトコルはその優先度に応じて並んでいる必要があります)。
\n \nSNICallback(servername, cb)
: クライアントが TLS 拡張の SNI を\nサポートしている場合に呼び出される関数です。\n二つの引数、servername
と cb
が渡されます。\nSNICallback
は、cb(null, ctx)
を呼び出す必要があります。\nctx
はSecureContext のインスタンスです\n(SecureContext を取得するために crypto.createCredentials(...).context
\nを使用することができます)。\nSNICallback
が渡されなかった場合は、デフォルトのコールバックとして\n後述する高水準 API が使用されます。
\n \nsessionTimeout
: サーバによって作成された TLS セッション識別子および TLS\nセッションチケットがタイムアウトするまでの秒数を指定する整数値です。\nより詳細は [SSL_CTX_set_timeout] を参照してください。
\n \nsessionIdContext
: セッション再開のための識別子となる文字列です。\nrequestCedrt
が true
の場合、デフォルトはコマンドライン引数から\n生成された MD5 ハッシュ値となります。\nそうでない場合はデフォルトは提供されません。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\nこれはシンプルはエコーサーバの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n key: fs.readFileSync('server-key.pem'),\n cert: fs.readFileSync('server-cert.pem'),\n\n // This is necessary only if using the client certificate authentication.\n requestCert: true,\n\n // This is necessary only if the client uses the self-signed certificate.\n ca: [ fs.readFileSync('client-cert.pem') ]\n};\n\nvar server = tls.createServer(options, function(socket) {\n console.log('server connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n socket.write("welcome!\\n");\n socket.setEncoding('utf8');\n socket.pipe(socket);\n});\nserver.listen(8000, function() {\n console.log('server bound');\n});
\n\n\nあるいは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('server.pfx'),\n\n // This is necessary only if using the client certificate authentication.\n requestCert: true,\n\n};\n\nvar server = tls.createServer(options, function(socket) {\n console.log('server connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n socket.write("welcome!\\n");\n socket.setEncoding('utf8');\n socket.pipe(socket);\n});\nserver.listen(8000, function() {\n console.log('server bound');\n});
\n\n\nopenssl s_client
を使用してこのサーバに接続するテストを行うことができます。\n\n
\nopenssl s_client -connect 127.0.0.1:8000
\n",
+ "desc": "\n\n新しい [tls.Server][] を作成します。\nconnectionListener
は [secureConnection][] イベントのリスナとして\n自動的に登録されます。\noptions
は以下を持つことができます:\n\n\n
\n\n\n\npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、および CA の\n証明書を含む文字列またはバッファ\n(key
、cert
、および ca
オプションとは相互に排他的です)。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または Buffer
です\n(必須)。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です\n(必須)。
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \ncrl
: PEM でエンコードされた CRL (Certificate Revocation List、\n失効した証明書の一覧) の文字列または文字列の配列。
\n \nciphers
: 使用または除外する暗号を記述した文字列です。
\n[BEAST 攻撃]を抑制するために、このオプションと以下に示す honorCipherOrder
\nを共に使って、非 CBC 暗号を優先することを推奨します。
\nデフォルトは\nECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH
です。\n詳細は [OpenSSL 暗号リストフォーマットのドキュメント] を参照してください。
\nECDHE-RSA-AES128-SHA256
と AES128-GCM-SHA256
は TLS v1.2 の暗号で、\nNode.js が (バンドルされているバージョンなどの) OpenSSL 1.0.1 以降と\nリンクされている場合に使われます。\nhonorCipherOrder
が有効でない限り、TLS v1.2 を使用していても\nクライアントはより弱い暗号を要求出来ることに注意してください。
\nRC4
は、クライアントがより古いバージョンの TLS プロトコルを喋る場合に\nフォールバックとして使われます。\nRC4
は近年疑いをもたれており、真に繊細なものに対しては\n漏洩を考慮すべきです。\n国家レベルの何者かがそれを破る力を持っていると推測されています。
\n注意: 以前のバージョンのこのセクションは AES256-SHA
を\n受け入れ可能な暗号であるかのように示していました。\n残念ながら、AES256-SHA
は CBC 暗号であり、したがって\n[BEAST 攻撃] には弱いです。\n使わない でください。
\n \necdhCurve
: ECDH 鍵合意で使用する曲線を説明する名前、または全ての\nECDH を無効にする false
。
\nデフォルトは prime256v1
です。より詳細は [RFC 4492] を参照してください。
\n \nhandshakeTimeout
: SSL/TLS ハンドシェークがこの時間 (ミリ秒)\n以内に終了しなかった場合は接続をアボートします。\nデフォルトは 120 秒です。
\nハンドシェークがタイムアウトすると、tls.Server
オブジェクトで\n'clientError'
イベントが生成されます。
\n \nhonorCipherOrder
:\n暗号を選択する際に、クライアントではなくサーバの設定を使用します。
\nこのオプションはデフォルトでは無効ですが、BEAST 攻撃を抑制するために\nciphers
オプションと共に使用することを 推奨 します。
\n注意: SSLv2 が使われる場合は、サーバは設定のリストをクライアントに送信し、\nクライアントが暗号を選択します。\nSSLv2 のサポートは、node.js が ./configure --with-sslv2
によって\n構成されない限り無効です。
\n \nrequestCert
: true
の場合、サーバは接続しようとするクライアントからの\n証明書を要求します。デフォルトは false
です。
\n \nrejectUnauthorized
: true
の場合、サーバは提供された認証局の\nリストによって認証されていないコネクションを破棄します.\nこのオプションは requestCert
が true
の場合だけ効果があります。\nデフォルトは false
です。
\n \nNPNProtocols
: NPN プロトコルで使用可能な文字列または Buffer
の配列\n(プロトコルはその優先度に応じて並んでいる必要があります)。
\n \nSNICallback(servername, cb)
: クライアントが TLS 拡張の SNI を\nサポートしている場合に呼び出される関数です。\n二つの引数、servername
と cb
が渡されます。\nSNICallback
は、cb(null, ctx)
を呼び出す必要があります。\nctx
はSecureContext のインスタンスです\n(SecureContext を取得するために crypto.createCredentials(...).context
\nを使用することができます)。\nSNICallback
が渡されなかった場合は、デフォルトのコールバックとして\n後述する高水準 API が使用されます。
\n \nsessionTimeout
: サーバによって作成された TLS セッション識別子および TLS\nセッションチケットがタイムアウトするまでの秒数を指定する整数値です。\nより詳細は [SSL_CTX_set_timeout] を参照してください。
\n \nsessionIdContext
: セッション再開のための識別子となる文字列です。\nrequestCedrt
が true
の場合、デフォルトはコマンドライン引数から\n生成された MD5 ハッシュ値となります。\nそうでない場合はデフォルトは提供されません。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\nこれはシンプルはエコーサーバの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n key: fs.readFileSync('server-key.pem'),\n cert: fs.readFileSync('server-cert.pem'),\n\n // This is necessary only if using the client certificate authentication.\n requestCert: true,\n\n // This is necessary only if the client uses the self-signed certificate.\n ca: [ fs.readFileSync('client-cert.pem') ]\n};\n\nvar server = tls.createServer(options, function(socket) {\n console.log('server connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n socket.write("welcome!\\n");\n socket.setEncoding('utf8');\n socket.pipe(socket);\n});\nserver.listen(8000, function() {\n console.log('server bound');\n});
\n\n\nあるいは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('server.pfx'),\n\n // This is necessary only if using the client certificate authentication.\n requestCert: true,\n\n};\n\nvar server = tls.createServer(options, function(socket) {\n console.log('server connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n socket.write("welcome!\\n");\n socket.setEncoding('utf8');\n socket.pipe(socket);\n});\nserver.listen(8000, function() {\n console.log('server bound');\n});
\n\n\nopenssl s_client
を使用してこのサーバに接続するテストを行うことができます。\n\n
\nopenssl s_client -connect 127.0.0.1:8000
\n",
"signatures": [
{
"params": [
@@ -56,7 +62,7 @@
"textRaw": "tls.connect(options, [callback])",
"type": "method",
"name": "connect",
- "desc": "\n\n与えられた port
と host
(旧 API) または options.port
と options.host
\nで新しいクライアントコネクションを作成します\n(host
が省略された場合、デフォルトは localhost
です)。\noptions
は以下を指定したオブジェクトです:\n\n
\n\n\n\nhost
: クライアントが接続するホスト。
\n \nport
: クライアントが接続するポート番号。
\n \nsocket
: 新しいソケットを生成するのではなく、与えられたソケット上で\nセキュアな接続を確立します。\nこのオプションが指定された場合、host
および port
は無視されます。
\n \npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、\nおよびサーバに対する CA の証明書を含む文字列またはバッファ。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または\nBuffer
です。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です。
\n \nsecureProtocol
: The SSL method to use, e.g. SSLv3_method
to force\nSSL version 3. The possible values depend on your installation of\nOpenSSL and are defined in the constant [SSL_METHODS][].
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \nrejectUnauthorized
: true
の場合、サーバ証明書は提供された認証局の\nリストによって検証されます。\n認証されなかった場合は 'error'
イベントが生成されます。\n認証は HTTP リクエストが送信される 前 にコネクションレベルで行われます。\nデフォルトは true です。
\n \nNPNProtocols
: サポートする NPN プロトコルの文字列または Buffer
\nの配列です。\nBuffer
は次のような形式です: 0x05hello0x5world
\n最初のバイトは次のプロトコル名の長さです\n(通常、配列を渡す方がシンプルです: ['hello', 'world']
)。
\n \nservername
: TLS 拡張である SNI (Server Name Indication) のサーバ名です。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\ncallback
引数は ['secureConnect'][] イベントのリスナとして\n加えられます。\n\n
\ntls.connect()
は [tls.TLSSocket][] オブジェクトを返します。\n\n
\nこれは前述のエコーサーバに接続するクライアントの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n // These are necessary only if using the client certificate authentication\n key: fs.readFileSync('client-key.pem'),\n cert: fs.readFileSync('client-cert.pem'),\n\n // This is necessary only if the server uses the self-signed certificate\n ca: [ fs.readFileSync('server-cert.pem') ]\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n\n\nまたは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('client.pfx')\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n",
+ "desc": "\n\n与えられた port
と host
(旧 API) または options.port
と options.host
\nで新しいクライアントコネクションを作成します\n(host
が省略された場合、デフォルトは localhost
です)。\noptions
は以下を指定したオブジェクトです:\n\n
\n\n\n\nhost
: クライアントが接続するホスト。
\n \nport
: クライアントが接続するポート番号。
\n \nsocket
: 新しいソケットを生成するのではなく、与えられたソケット上で\nセキュアな接続を確立します。\nこのオプションが指定された場合、host
および port
は無視されます。
\n \npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、\nおよびサーバに対する CA の証明書を含む文字列またはバッファ。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または\nBuffer
です。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です。
\n \nsecureProtocol
: The SSL method to use, e.g. SSLv3_method
to force\nSSL version 3. The possible values depend on your installation of\nOpenSSL and are defined in the constant [SSL_METHODS][].
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \nrejectUnauthorized
: true
の場合、サーバ証明書は提供された認証局の\nリストによって検証されます。\n認証されなかった場合は 'error'
イベントが生成されます;\nerr.code
は OpenSSL のエラーコードを含みます。\nデフォルトは true です。
\n \nNPNProtocols
: サポートする NPN プロトコルの文字列または Buffer
\nの配列です。\nBuffer
は次のような形式です: 0x05hello0x5world
\n最初のバイトは次のプロトコル名の長さです\n(通常、配列を渡す方がシンプルです: ['hello', 'world']
)。
\n \nservername
: TLS 拡張である SNI (Server Name Indication) のサーバ名です。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\ncallback
引数は ['secureConnect'][] イベントのリスナとして\n加えられます。\n\n
\ntls.connect()
は [tls.TLSSocket][] オブジェクトを返します。\n\n
\nこれは前述のエコーサーバに接続するクライアントの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n // These are necessary only if using the client certificate authentication\n key: fs.readFileSync('client-key.pem'),\n cert: fs.readFileSync('client-cert.pem'),\n\n // This is necessary only if the server uses the self-signed certificate\n ca: [ fs.readFileSync('server-cert.pem') ]\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n\n\nまたは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('client.pfx')\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n",
"signatures": [
{
"params": [
@@ -94,7 +100,7 @@
"textRaw": "tls.connect(port, [host], [options], [callback])",
"type": "method",
"name": "connect",
- "desc": "\n\n与えられた port
と host
(旧 API) または options.port
と options.host
\nで新しいクライアントコネクションを作成します\n(host
が省略された場合、デフォルトは localhost
です)。\noptions
は以下を指定したオブジェクトです:\n\n
\n\n\n\nhost
: クライアントが接続するホスト。
\n \nport
: クライアントが接続するポート番号。
\n \nsocket
: 新しいソケットを生成するのではなく、与えられたソケット上で\nセキュアな接続を確立します。\nこのオプションが指定された場合、host
および port
は無視されます。
\n \npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、\nおよびサーバに対する CA の証明書を含む文字列またはバッファ。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または\nBuffer
です。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です。
\n \nsecureProtocol
: The SSL method to use, e.g. SSLv3_method
to force\nSSL version 3. The possible values depend on your installation of\nOpenSSL and are defined in the constant [SSL_METHODS][].
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \nrejectUnauthorized
: true
の場合、サーバ証明書は提供された認証局の\nリストによって検証されます。\n認証されなかった場合は 'error'
イベントが生成されます。\n認証は HTTP リクエストが送信される 前 にコネクションレベルで行われます。\nデフォルトは true です。
\n \nNPNProtocols
: サポートする NPN プロトコルの文字列または Buffer
\nの配列です。\nBuffer
は次のような形式です: 0x05hello0x5world
\n最初のバイトは次のプロトコル名の長さです\n(通常、配列を渡す方がシンプルです: ['hello', 'world']
)。
\n \nservername
: TLS 拡張である SNI (Server Name Indication) のサーバ名です。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\ncallback
引数は ['secureConnect'][] イベントのリスナとして\n加えられます。\n\n
\ntls.connect()
は [tls.TLSSocket][] オブジェクトを返します。\n\n
\nこれは前述のエコーサーバに接続するクライアントの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n // These are necessary only if using the client certificate authentication\n key: fs.readFileSync('client-key.pem'),\n cert: fs.readFileSync('client-cert.pem'),\n\n // This is necessary only if the server uses the self-signed certificate\n ca: [ fs.readFileSync('server-cert.pem') ]\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n\n\nまたは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('client.pfx')\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n",
+ "desc": "\n\n与えられた port
と host
(旧 API) または options.port
と options.host
\nで新しいクライアントコネクションを作成します\n(host
が省略された場合、デフォルトは localhost
です)。\noptions
は以下を指定したオブジェクトです:\n\n
\n\n\n\nhost
: クライアントが接続するホスト。
\n \nport
: クライアントが接続するポート番号。
\n \nsocket
: 新しいソケットを生成するのではなく、与えられたソケット上で\nセキュアな接続を確立します。\nこのオプションが指定された場合、host
および port
は無視されます。
\n \npfx
: PFX または PKCS12 でエンコードされた秘密鍵、証明書、\nおよびサーバに対する CA の証明書を含む文字列またはバッファ。
\n \nkey
: PEM フォーマットによるサーバの秘密鍵を持つ文字列または\nBuffer
です。
\n \npassphrase
: 秘密鍵または pfx のパスフレーズを表す文字列です。
\n \ncert
: PEM フォーマットによる証明書の鍵を持つ文字列または Buffer
です。
\n \nsecureProtocol
: The SSL method to use, e.g. SSLv3_method
to force\nSSL version 3. The possible values depend on your installation of\nOpenSSL and are defined in the constant [SSL_METHODS][].
\n \nca
: PEM フォーマットによる信頼できる証明書の文字列または\nBuffer
の配列です。\n省略された場合、ベリサインなどのよく知られた「ルート」認証局が使われます。\nこれらはコネクションの認証に使われます。
\n \nrejectUnauthorized
: true
の場合、サーバ証明書は提供された認証局の\nリストによって検証されます。\n認証されなかった場合は 'error'
イベントが生成されます;\nerr.code
は OpenSSL のエラーコードを含みます。\nデフォルトは true です。
\n \nNPNProtocols
: サポートする NPN プロトコルの文字列または Buffer
\nの配列です。\nBuffer
は次のような形式です: 0x05hello0x5world
\n最初のバイトは次のプロトコル名の長さです\n(通常、配列を渡す方がシンプルです: ['hello', 'world']
)。
\n \nservername
: TLS 拡張である SNI (Server Name Indication) のサーバ名です。
\n \nsecureProtocol
: 使用する SSL メソッド、たとえば SSLv3_method
は\nSSL version 3 の使用を強制します。可能な値は使用する OpenSSL によって\n定義される [SSL_METHODS][] 定数に依存します。
\n \n
\n\n\ncallback
引数は ['secureConnect'][] イベントのリスナとして\n加えられます。\n\n
\ntls.connect()
は [tls.TLSSocket][] オブジェクトを返します。\n\n
\nこれは前述のエコーサーバに接続するクライアントの例です:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n // These are necessary only if using the client certificate authentication\n key: fs.readFileSync('client-key.pem'),\n cert: fs.readFileSync('client-cert.pem'),\n\n // This is necessary only if the server uses the self-signed certificate\n ca: [ fs.readFileSync('server-cert.pem') ]\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n\n\nまたは:\n\n
\nvar tls = require('tls');\nvar fs = require('fs');\n\nvar options = {\n pfx: fs.readFileSync('client.pfx')\n};\n\nvar socket = tls.connect(8000, options, function() {\n console.log('client connected',\n socket.authorized ? 'authorized' : 'unauthorized');\n process.stdin.pipe(socket);\n process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', function(data) {\n console.log(data);\n});\nsocket.on('end', function() {\n server.close();\n});
\n",
"signatures": [
{
"params": [
@@ -365,7 +371,7 @@
{
"textRaw": "tlsSocket.localPort",
"name": "localPort",
- "desc": "\n\n数値表現によるローカルポートです。\n\n
\n\n\n"
+ "desc": "\n\n数値表現によるローカルポートです。\n\n
\n\n\n"
}
],
"methods": [
@@ -409,6 +415,21 @@
}
]
},
+ {
+ "textRaw": "tlsSocket.setMaxSendFragment(size)",
+ "type": "method",
+ "name": "setMaxSendFragment",
+ "desc": "\n\n最大の TLS フラグメントサイズを設定します (デフォルトおよび最大の値は 16384
、\n最少は 512
)。\n成功すれば true
、そうでなければ false
を返します。\n\n
\n\n\n小さなフラグメントサイズは、クライアントでのバッファリングの遅延を減少します:\n大きなフラグメントは、全てのフラグメントが受信されてその完全性が確かめられるまで\nTLS 層によってバッファリングされます;\n大きなフラグメントは複数のラウンドトリップに分割され、\nパケットの喪失や並べ替えにより遅延が発生することがあります。\nしかしながら、小さなフラグメントは余分な TLS フレームのバイトと\nCPU のオーバーヘッドを加えるため、全体としてサーバのスループットを\n低下させるでしょう。\n\n
\n",
+ "signatures": [
+ {
+ "params": [
+ {
+ "name": "size"
+ }
+ ]
+ }
+ ]
+ },
{
"textRaw": "tlsSocket.address()",
"type": "method",
diff --git a/api/tty.html b/api/tty.html
index 01bd402..ff993c8 100644
--- a/api/tty.html
+++ b/api/tty.html
@@ -2,7 +2,7 @@
- TTY Node.js v0.11.10 Manual & Documentation
+ TTY Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -239,7 +239,7 @@
Event: 'resize'@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/url.html b/api/url.html
index 05bc7d4..0465170 100644
--- a/api/url.html
+++ b/api/url.html
@@ -2,7 +2,7 @@
- URL Node.js v0.11.10 Manual & Documentation
+ URL Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -298,7 +298,7 @@
url.resolve(from, to)@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/util.html b/api/util.html
index ac66385..0a2bdbe 100644
--- a/api/util.html
+++ b/api/util.html
@@ -2,7 +2,7 @@
- util Node.js v0.11.10 Manual & Documentation
+ util Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -601,7 +601,7 @@
util.pump(readableStream, writableStream, [callback])@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/vm.html b/api/vm.html
index 964b34a..ddb34f0 100644
--- a/api/vm.html
+++ b/api/vm.html
@@ -2,7 +2,7 @@
- Executing JavaScript Node.js v0.11.10 Manual & Documentation
+ Executing JavaScript Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -588,7 +588,7 @@
script.runInNewContext([sandbox], [options])@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/api/zlib.html b/api/zlib.html
index 6f5e31d..41a9db2 100644
--- a/api/zlib.html
+++ b/api/zlib.html
@@ -2,7 +2,7 @@
- Zlib Node.js v0.11.10 Manual & Documentation
+ Zlib Node.js v0.11.11 Manual & Documentation
@@ -41,7 +41,7 @@
- Node.js v0.11.10 マニュアル & ドキュメンテーション
+ Node.js v0.11.11 マニュアル & ドキュメンテーション
Index |
@@ -754,7 +754,7 @@
Constants#<
@nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/changelog.html b/changelog.html
index 5f76c44..e0278bb 100644
--- a/changelog.html
+++ b/changelog.html
@@ -36,9 +36,64 @@ Node.js ChangeLog
+
+2014.01.29 Version 0.11.11 (Unstable)
+
+v8: Upgrade to 3.22.24.19
+
+http_parser: Upgrade to 2.2.1
+
+openssl: Upgrade to 1.0.1f
+
+uv: Upgrade to 0.11.18
+
+async-listener: revamp of subsystem (Trevor Norris)
+
+node: do not ever close stdio (Fedor Indutny)
+
+http: use writev on chunked encoding (Trevor Norris)
+
+async_wrap/timers: remove Add/RemoveAsyncListener (Trevor Norris)
+
+child_process: better error reporting for exec (Fedor Indutny)
+
+crypto: add newline to cert and key if not present (Fedor Indutny)
+
+crypto: clear error in GetPeerCertificate (Fedor Indutny)
+
+crypto: honor default ciphers in client mode (Jacob Hoffman-Andrews)
+
+crypto: introduce .setEngine(engine, [flags]) (Fedor Indutny)
+
+crypto: support custom pbkdf2 digest methods (Ben Noordhuis)
+
+domain: fix off-by-one in Domain.exit() (Ryan Graham)
+
+http: concatenate duplicate headers by default (Alex Kocharin)
+
+http: do not emit EOF non-readable socket (Fedor Indutny)
+
+node: fix argument parsing with -p arg (Alexis Campailla)
+
+path: improve POSIX path.join() performance (Jo Liss)
+
+tls: emit clientError
on early socket close (Fedor Indutny)
+
+tls: introduce .setMaxSendFragment(size)
(Fedor Indutny)
+
+tls: make cert/pfx optional in tls.createServer() (Ben Noordhuis)
+
+tls: process accumulated input (Fedor Indutny)
+
+tls: show human-readable error messages (Ben Noordhuis)
+
+util: handle escaped forward slashes correctly (Tom Gallacher)
+
+
-2013.12.31 Version 0.11.10 (Unstable)
+2013.12.31 Version 0.11.10 (Unstable), 669317
http_parser: update to 2.2
@@ -505,6 +560,27 @@ 2013.03.28 Version 0.11.0 (Unstable),
+
+2014.01.23 Version 0.10.25 (Stable), b0e5f1
+
+uv: Upgrade to v0.10.23
+
+npm: Upgrade to v1.3.24
+
+v8: Fix enumeration for objects with lots of properties
+
+child_process: fix spawn() optional arguments (Sam Roberts)
+
+cluster: report more errors to workers (Fedor Indutny)
+
+domains: exit() only affects active domains (Ryan Graham)
+
+src: OnFatalError handler must abort() (Timothy J Fontaine)
+
+stream: writes may return false but forget to emit drain (Yang Tianyang)
+
+
2013.12.18 Version 0.10.24 (Stable), b7fd6b
@@ -5584,7 +5660,7 @@ 2009.06.11 Version 0.0.3, @nodejs
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
diff --git a/community/index.html b/community/index.html
index 00a1778..e7015cb 100644
--- a/community/index.html
+++ b/community/index.html
@@ -467,7 +467,7 @@ IRC
Copyright Joyent, Inc, Node.js is a
trademark of Joyent, Inc. View
- license.
+ license.
diff --git a/download/index.html b/download/index.html
index 0e0a6cf..989a59f 100644
--- a/download/index.html
+++ b/download/index.html
@@ -38,34 +38,34 @@
Download the Node.js source code or a pre-built installer for your platform, and start developing today.
- Current version: v0.11.10
+ Current version: v0.11.11
-
-
+
Windows Installer
- node-v0.11.10-x86.msi
+ node-v0.11.11-x86.msi
-
-
+
Macintosh Installer
- node-v0.11.10.pkg
+ node-v0.11.11.pkg
-
-
+
Source Code
- node-v0.11.10.tar.gz
+ node-v0.11.11.tar.gz
@@ -74,57 +74,57 @@
Windows Installer (.msi)
- 32-bit
- 64-bit
+ 32-bit
+ 64-bit
Windows Binary (.exe)
- 32-bit
- 64-bit
+ 32-bit
+ 64-bit
Mac OS X Installer (.pkg)
- Universal
+ Universal
Mac OS X Binaries (.tar.gz)
- 32-bit
- 64-bit
+ 32-bit
+ 64-bit
Linux Binaries (.tar.gz)
- 32-bit
- 64-bit
+ 32-bit
+ 64-bit
SunOS Binaries (.tar.gz)
- 32-bit
- 64-bit
+ 32-bit
+ 64-bit
Source Code
- node-v0.11.10.tar.gz
+ node-v0.11.11.tar.gz
@@ -134,15 +134,15 @@
Other Info
- - Shasums
- - Change Log
+ - Shasums
+ - Change Log
- - Documentation
+ - Documentation
- Git Repository
- Installing from package managers
-
- Other release files
+ - Other release files
- Other releases
- Nightly builds
@@ -154,7 +154,7 @@ License
Node.js is released under the MIT
license, and bundles other liberally licensed OSS components.
Download the license
+ href="https://raw.github.com/joyent/node/v0.11.11/LICENSE">Download the license
@@ -174,7 +174,7 @@ License
- Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.
+ Copyright Joyent, Inc, Node.js is a trademark of Joyent, Inc. View license.