Node.jsベース23456:グローバルオブジェクト、コールバック関数、モジュール、イベント、読み書きファイル(同期、非同期)
6013 ワード
グローバルオブジェクト
同様に、ブラウザ内の
グローバル変数はすべてのモジュールで使用できます.以下の変数はグローバル変数のように見えますが、実際はそうではありません.それらのスコープはモジュール内だけです.詳細はドキュメントを参照してください.
jsと同じです.
大きなプロジェクトは必ずモジュールに分けられます.一般的には一つのファイルは一つのモジュールです.モジュールの使い方:外に露出するのは対象です.私たちは
http://nodejs.cn/api/events.html
ほとんどのNode.jsコアAPIは、いくつかのタイプのオブジェクト(触発器、Emitter)が、関数(またはモニタ、Listener)を呼び出すためにネーミングイベントをトリガします.
例えば、
イベントをトリガすることができるすべてのオブジェクトは、
例として、簡単なフリップフロップ(Emitter)は、モニタ(Listener)をトリガし、その後、関数が同期して呼び出される. myEmitter.on('event'、()=>{}イベントと関数を結びつけるために使用されます.イベントをトリガするために の例:
通信パラメータは
http://nodejs.cn/api/events.h...
eventEmitter.emiit()メソッドは、モニター関数に任意の数のパラメータを送ることができます.モニター関数が呼び出されると、thisキーワードは、モニターによって結合されたEventEmitterの例に向けられます. を表す.
事件は一回きりです.
ファイルシステム:http://nodejs.cn/api/fs.htmlfs モジュールは、標準POSIX関数のような方法でファイルシステムと相互作用するために使用されます.
使用方法は以下の通りです.
const fs=require('fs')は、すべてのファイルシステムの動作に同期と非同期の2つの形態がある.
非同期
非同期形式の最後のパラメータは完了時のコールバック関数です.コールバック関数に送るパラメータは具体的な方法によって異なりますが、最初のパラメータは異常に保たれます.動作が成功したら、最初のパラメータ(異常)は
同期動作を使用すると、何らかの異常が直ちに投げ出され、
非同期の方法は、実行順序を保証することができない.したがって、以下の例は、
同様に、ブラウザ内の
window
グローバル変数は、すべてのモジュールで使用できます.引用などは不要です.大域変数は、console
、setTimeout
、require()
などです.グローバル変数はすべてのモジュールで使用できます.以下の変数はグローバル変数のように見えますが、実際はそうではありません.それらのスコープはモジュール内だけです.詳細はドキュメントを参照してください.
__dirname
__filename
exports
module
require()
コールバック関数jsと同じです.
function callFunction(fun, name) {
fun(name);
}
callFunction(function(name) {
console.log(name + ' Bye');
}, 'mtt');
モジュール大きなプロジェクトは必ずモジュールに分けられます.一般的には一つのファイルは一つのモジュールです.モジュールの使い方:外に露出するのは対象です.私たちは
require()
の時、受け取ったのも一つの対象です.だから、ap.jsもこのように書いてもいいです.var stuff = require('./count');
console.log(stuff.counter(['ruby', 'nodejs', 'react']));
console.log(stuff.adder(3));//6.14
他のモジュールの変数(クローズド)count.jsを使うことができます.var adder = function(a) {
return `the sum of the 2 numbers is ${a+pi}`;
}
var pi = 3.14;
module.exports = {
counter: function(arr) {
return "There are " + arr.length + " elements in the array";
},
adder: adder
}
イベントhttp://nodejs.cn/api/events.html
ほとんどのNode.jsコアAPIは、いくつかのタイプのオブジェクト(触発器、Emitter)が、関数(またはモニタ、Listener)を呼び出すためにネーミングイベントをトリガします.
例えば、
net.Server
は、新しい接続があるたびにイベントをトリガし、fs.ReadStream
は、ファイルを開くときにイベントをトリガし、stream
は、データ読み取り時にイベントをトリガする.イベントをトリガすることができるすべてのオブジェクトは、
EventEmitter
クラスの例である.これらのオブジェクトは、1つまたは複数の関数を名前付きイベントに結びつけるeventEmitter.on()
関数を有する.イベントの名前は通常、ラクダのピーク式の文字列です. EventEmitter
オブジェクトがイベントをトリガすると、イベントに結びつけられたすべての関数が同期して呼び出される.例として、簡単な
EventEmitter
例が、モニターをバインドしている.eventEmitter.on()
は、イベントをトリガするためにモニターを登録するために使用される.const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log(' ');
});
myEmitter.emit('event');
まとめ理解:eventEmitter.emit()
は、新しい接続があるたびにイベントをトリガし、eventEmitter.emit()
は、ファイルを開くときにイベントをトリガし、net.Server
は、データ読み取り時にイベントをトリガする.通信パラメータは
fs.ReadStream
とモニターになります.http://nodejs.cn/api/events.h...
eventEmitter.emiit()メソッドは、モニター関数に任意の数のパラメータを送ることができます.モニター関数が呼び出されると、thisキーワードは、モニターによって結合されたEventEmitterの例に向けられます.
const EventEmitter = require('events');
class MyEmitter extends EventEmitter{}
const myEmitter1 = new MyEmitter();
myEmitter1.on('exxx',function (a, b) {
console.log(a, b, this, this===myEmitter1);
})
myEmitter1.emit('exxx',' a',' b')
まとめ:stream
は、第二のパラメータから、そのパラメータをモニターバインディングの関数に伝達し、第一の始まりとします.this
は、呼び出しeventEmitter.emit()
の例事件は一回きりです.
this
を使用してモニターを登録すると、モニタは、イベント名をトリガするたびに呼び出しられる.const myEmitter = new MyEmitter();
let m = 0;
myEmitter.on('event', () => {
console.log(++m);
});
myEmitter.emit('event');
// : 1
myEmitter.emit('event');
// : 2
on
を使用して、最大一回まで呼び出すことができるモニターを登録してもいいです.イベントがトリガされた場合、モニターはキャンセルされ、再起動されます.const myEmitter = new MyEmitter();
let m = 0;
myEmitter.once('event', () => {
console.log(++m);
});
myEmitter.emit('event');
// : 1
myEmitter.emit('event');
//
evnetsはコアライブラリで、直接eventEmitter.on()
は手動でコードでイベントをトリガします.util(実用ツール)(nodejsコアツールライブラリ)http://nodejs.cn/api/util.htm... var events = require('events');
var util = require('util');//nodejs
var Person = function(name) {
this.name = name
}
util.inherits(Person, events.EventEmitter);
// Person events.EventEmitter( ES6 extends ), , 。
var xiaoming = new Person('xiaoming');
var lili = new Person('lili');
var lucy = new Person('lucy');
//
var person = [xiaoming, lili, lucy];
person.forEach(function(person) {
person.on('speak', function(message) {
console.log(person.name + " said: " + message);//
})
})
xiaoming.emit('speak', 'hi');//
lucy.emit('speak', 'I want a curry');
ファイルの読み書き(同期、非同期)ファイルシステム:http://nodejs.cn/api/fs.htmlfs モジュールは、標準POSIX関数のような方法でファイルシステムと相互作用するために使用されます.
使用方法は以下の通りです.
const fs=require('fs')は、すべてのファイルシステムの動作に同期と非同期の2つの形態がある.
非同期
非同期形式の最後のパラメータは完了時のコールバック関数です.コールバック関数に送るパラメータは具体的な方法によって異なりますが、最初のパラメータは異常に保たれます.動作が成功したら、最初のパラメータ(異常)は
eventEmitter.once()
またはrequire('events')
です.const fs = require('fs');
fs.unlink('/tmp/hello', (err) => {
if (err) throw err;
console.log(' /tmp/hello');
});
同期同期動作を使用すると、何らかの異常が直ちに投げ出され、
null
を使用して異常を処理することができる.const fs = require('fs');
try {
fs.unlinkSync('/tmp/hello');
console.log(' /tmp/hello');
} catch (err) {
// 。
}
同期同期同期の注意非同期の方法は、実行順序を保証することができない.したがって、以下の例は、
undefined
がtry/catch
の前に完了する可能性があるので、エラーが発生する可能性がある.fs.rename('/tmp/hello', '/tmp/world', (err) => {
if (err) throw err;
console.log(' ');
});
fs.stat('/tmp/world', (err, stats) => {
if (err) throw err;
console.log(` : ${JSON.stringify(stats)}`);
});
, fs.stat() fs.rename() :
fs.rename('/tmp/hello', '/tmp/world', (err) => {
if (err) throw err;
fs.stat('/tmp/world', (err, stats) => {
if (err) throw err;
console.log(` : ${JSON.stringify(stats)}`);
});
});