かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

TypeScriptでNodeのHello world

簡単な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の感想

こいつ…コールバック地獄になるんじゃないか…。