スポンサーサイト

-------- --:--:-- --

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Javascript】さわってみた【node.js】

2012-01-27 03:16:13 Fri

■誤解していたこと


node.js = サーバサイド javascript = サーバ機能 = 動的HTML
みたいに思っていました。

実はそれは一機能。
コードにするとこれ。

var http = require('http');

http.createServer(
function (request, response) {
}).listen(8124);



他の使い方としてはshellからnodejsを読んでそこで他サイトのHTMLをスクレイピングとか…
まあもう色々できます。

node XXXX.js
みたいなコマンドでnode.jsを実行できます。
このときXXXX.jsが上述のようなコードのjsファイルだとサーバアプリとして動くわけです。

■サーバ機能をそれなりに使うとして


node.jsといえばwebsocket的な話になりますがそちらはまだぜんぜんわかりません。
なので普通のWebサーバ的に。
上述のコードではポート8124でリクエストを待ち受けることになります。

まずやりたくなるのがURLによる処理の割り振り。
どうやってやるのか結局わからなかったのでURLを解析して…みたいな処理にしてみました。
あ、POST試していませんでした…。

// url.parseの第二引数をtrueにすることでurl.queryを連想配列で取得できる
var url_parse = require('url');
var url = url_parse.parse(request.url, true);


これでURLをパースすることができます。
マニュアル参照。http://nodejs.jp/nodejs.org_ja/api/url.html
とりあえず上のparseをするとクエリストリングのパラメータに名称でアクセスして値を取得できるようになります。

console.log(url.pathname);
console.log(url.query);
console.log(url.query['parameter']);


次に外部においたファイルを読み込む。
ついでにJSONとして。

res.writeHead(200, {'Content-Type':'application/json; charset=utf-8'});
var read = fs.createReadStream('./data/sample.json', {bufferSize: 32});
read.on('data', function (data) { res.write(data); })
.on('end', function () { res.write('\n'); res.end(); })
.on('error', function (exception) { console.log('r: error'); })
.on('close', function () { console.log('r: colse'); })
.on('fd', function (fd) { console.log('r: fd'); });


こんな感じ。

ファイルパスはこんな感じです。
WS000198.jpg
※相対パス指定していますが、これってnodeプロセスを実行しているコンソールのいるパスがカレント?単に読み込まれたjsファイルのある場所をカレントとしているの?はたまた?
この処理はjsのメリットとして言われているノンブロッキング処理です。
I/Oを待ちません。イベント駆動です。
どうしてもI/Oをまつのであれば、endイベントで後続処理をコールバックするようにします。
スポンサーサイト

⇒comment

Secret

名言集
全記事(数)表示
全タイトルを表示
ブログ内検索
Loading
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。