Cookieのやりとりだ。
/// <reference path="./typings/node/node-0.11.d.ts" />
import http = require('http');
import url = require('url');
import path = require('path');
import querystring = require('querystring');
var port = 9999; // 待ち受けポート番号
// サーバー起動
var server = http.createServer(requestServer)
.listen(port);
// 接続されたときに呼ばれる関数
function requestServer(req:http.ServerRequest, res:http.ServerResponse):void {
var uri = url.parse(req.url, true);
console.log(uri.pathname);
switch(uri.pathname) {
case "/set":
res.setHeader("Content-Type", "text/plain");
// Cookieに"hoge1=111"と"hoge2=あいうえお"を設定する。
res.setHeader("Set-Cookie", <any>[ "hoge1=111", "hoge2=" +
querystring.escape("あいうえお") ]);
res.writeHead(200);
res.write("test");
res.end();
break;
case "/get":
res.writeHead(200, { "Content-Type" : "text/plain" });
if(req.headers.cookie !== undefined) {
// 設定されているCookieをブラウザに表示する
res.write(req.headers.cookie);
} else {
res.write("Unset Cookie");
}
res.end();
break;
default:
res.writeHead(404, {"Content-Type" : "text/plain"});
res.write("404 Not found.");
res.end();
}
}
http://localhost:9999/set にブラウザでアクセスするとクッキーがセットされ、
http://localhost:9999/get にアクセするとセットされているクッキーが表示される。
"hoge1=111; hoge2=%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A"と表示されるのでわかるように、;で分割してデコードしたりしないといけない。
が、node-cookieというモジュールがあるのでそれを使うとその辺のことをやってくれる。
$ npm install cookie
でインストールする。
TypeScriptの型定義ファイルもあるので
$ tsd install cookie -ors
でインストールする。
先頭の方で
/// <reference path="./typings/cookie/cookie.d.ts" />
import cookie = require('cookie');
を追加する。
クッキーの設定は、次のようになる。
res.setHeader("Set-Cookie", <any>[
cookie.serialize("hoge1", "111"),
cookie.serialize("hoge2", "あいうえお"),
cookie.serialize("hoge3", "かきくけこ", { maxAge:60 }) // 有効期限を60秒に
]);
日本語のエンコードもやってくれる。有効期限なんかも設定できる。
取得するところは、次のようになる。
var cookies = cookie.parse(req.headers.cookie);
for(var key in cookies) {
res.write(key + "=" + cookies[key] + "\n");
}
元のソースのそれぞれの場所を上のように変えてブラウザでアクセスすると
hoge1=111
hoge2=あいうえお
hoge3=かきくけこ
のように表示される。
日本語のデコードもやってくれる。hoge3は、60秒後にはなくなる。
コメント