簡単なHTTPサーバーを試してみました。
HTTPモジュールを読み込んで基本的なHTTPのサーバーをつくる。
import * as http from 'http'; var server = http.createServer(); var port = 1337; server.on('request', (req: http.ServerRequest, res: http.ServerResponse) => {var data = ''; req.on('data', (chunk: string) => { data += chunk; }); req.on('end', () => { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Body Echo: ' + data + '\n'); }); }); server.listen(port, () => { console.log('listening on ' + port); });
それに対してリクエストを投げてレスポンスを表示する。
import * as http from 'http'; var body = 'こんにちは世界'; var req = http.request({ port: 1337, host: '127.0.0.1', path: '/', headers: {'Content-Type': 'text/plain', 'Content-Length': Buffer.byteLength(body) }, method: 'GET'}, (res: http.ClientResponse) => { res.pipe(process.stdout); }); req.on('error', (e: Error) => { console.log(e.message); }); req.write(body); req.end();
何事も基本的なところからですね。
HTTPサーバー
httpモジュールを読み込んでcreateServerで作成できます。 HTTPのリクエストを受け取るとrequestイベントが発生するので、そこで色々やります。今回はリクエストのdataイベントで受け取ったデータを連結して、endイベント(リクエスト全部受信し終わったら発生するやつ)で受け取った内容をほぼそのまま返しています。
そして、listenメソッドでポート番号を指定して待ち受けです。
HTTPクライアント
http.requestメソッドで、リクエストが作れます。port, host, path, headers, methodなど必要なものをここで設定しておきます。Content-Lengthをきちんと設定しておかないとsocketがhung upしちゃいますので要注意。コールバックでレスポンスを受け取ったときの処理をします。ここでは、pipeでstdoutに内容をそのまま流してます。
そして、writeでデータを書き込む指定をしてendで書き込み実行!
こんなノリでいけます。
初Nodeの感想
こいつ…コールバック地獄になるんじゃないか…。