読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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の感想

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