node.jsでwebサーバーを立てるまでを理解する
node.jsを使って、webサーバーを立てるまで方法をメモしておきます。
参考:
MEANスタックで始めるWebアプリ開発入門(2):いまさら聞けないNode.jsの基礎知識とnpm、Gulpのインストール (1/2) - @IT
Node.js入門 (全16回) - プログラミングならドットインストール
いまいちポートやらhttpモジュールやらわからないので後々勉強しておきます。
[Node.js] Webサーバ+アプリ構築が速すぎる件 〜 JSおくのほそ道 #004 - Qiita
変更が楽なので、別ファイルにport,hostを設定しましょう。
//server.js var http = require('http'); //httpモジュールのインポート var server = http.createServer(); var settings = require('./settings') //同じディレクトリのsettingsファイルをrequire console.log(settings); server.on('request', function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('hello world'); resの中身を出力 res.end(); }) server.listen(settings.port,settings.host)
requireで標準のhttpサーバー用モジュールをインポートし、createServer関数でリクエストが来たときの処理(イベントハンドラ)を記述しています。そして、サーバーに対してlisten関数を実行することで、httpサーバーが待ち受けを開始します。listen関数の引数は起動時のport,hostです。
export関数で、requireで読み込めるようにします。
参考:node.jsで外部ファイルのJavaScriptを呼び出す - Node.js/JavaScript入門
//settings.js exports.port = 1337; exports.host = '127.0.0.1';
server.jsを実行して、{ port: 1337, host: '127.0.0.1' }と表示されていれば成功。
http://127.0.0.1:1337/にアクセスしてみましょう。
URLによって処理を変える
req.urlでURLを取得します。URLによって処理を変えるには、これとswitch構文を使います。
var http = require('http'); var server = http.createServer(); var settings = require('./settings'); var msg; console.log(settings); server.on('request', function(req, res) { switch (req.url) { case '/about': msg = "about this page"; break; case '/profile': msg = "about me"; break; default: msg = 'wrong page'; break; } res.writeHead(200, {'Content-Type': 'text/plain'}); res.write(msg); res.end(); }) server.listen(settings.port,settings.host)
アクセスしてみましょう。
HTMLファイルを読み込んでみよう
sever.jsと同じディレクトリにhello/hello.htmlを作ります
//hello/hello.html <html> <h1>Hello</h1> </html>
読み込んでみましょう
var http = require('http'), fs =require('fs'); //ファイルシステムモジュールの読み込み var server = http.createServer(); var settings = require('./settings'); var msg; console.log(settings); server.on('request', function(req, res) { fs.readFile(__dirname + '/hello/hello.html', 'utf-8', function(err, data){ if(err){ //err=trueならNot Foundを返します。 res.writeHead(404, {'Content-Type': 'text/plain'}); res.write("Not Found"); return res.end(); } res.writeHead(200, {'Content-Type': 'text/html'}); //htmlファイルなんでhtml res.write(data); res.end(); }); }); server.listen(settings.port,settings.host)
fs.readFile(file[, options], callback)
err,dataの引数を取るcallback関数を使っています。
node.js/documentationを見ると、encodingを指定しなければ生のbufferが返されるようです。
bufferってなんだ?と思い調べてみると、node.jsではbuffer classのインスタンスにbinary dataを格納できるようです。
octet streamを操作、作成、消費するための、純粋なJavascriptにはない方法らしいですが、どう使うのか今はわかりません...
参考:
About this Documentation Node.js v5.7.0 Manual & Documentation
File System Node.js v5.7.0 Manual & Documentation