Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9130

Webの勉強はじめてみた その23 〜HTTPサーバー編〜

$
0
0
N予備校「プログラミング入門Webアプリ」を受講しています。 今回は第3章12〜15節です。 HTTPサーバー node.jsのモジュールを使ってサーバーを立てる 'use strict'; const http = require('http'); const fs = require('fs'); const server = http .createServer((req, res) => { const now = new Date(); console.info(`[${now}] Requested by ${req.socket.remoteAddress}`); res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); switch (req.method) { case 'GET': //res.write('GET ' + req.url); const rs = fs.createReadStream('./form.html'); rs.pipe(res); break; case 'POST': res.write('POST ' + req.url); let rawData = ''; req .on('data', chunk => { rawData = rawData + chunk; }) .on('end', () => { console.info('[' + now + '] Data posted: ' + rawData); const decoded = decodeURIComponent(rawData); console.info(`${now} 投稿: ${decoded}`); res.write( `<!DOCTYPE html> <html lang='ja'> <body> <h1>${decoded}が投稿されました</h1> </body> </html>` ); res.end(); }); break; default: break; } //res.end(); }) .on('error', e => { console.error('[' + new Date() + '] Server Error', e); }) .on('clientError', e => { console.error('[' + new Date() + '] Client Error', e); }); const port = 8000; server.listen(port, () => { console.info('[' + new Date() + '] Listening on ' + port); }); http.createServerメソッド request: クライアントからの要求 resoponse: リクエストを受けてサーバーが返す内容 res.WriteHead: レスポンスするヘッダー情報 res.end: レスポンスの終了。必須。 req.socket.remoteAddress: クライアントのIP情報 req.headers: クライアント側の情報 ロギング ログレベル: ログの意味づけ。出力したい情報を明確にする。 console.info 標準出力。普段から残しておきたい情報 console.warn 標準エラー出力。 警告。問題となる可能性がある情報に使う。 console.error 標準エラー出力。 エラー。直ちに対応が必要な情報に使う。 エラーログ ハンドリング: 自分が操作可能な状態(コントロールできる状態)にすること。 serverオブジェクトに対してonメソッドでエラー時の処理を登録する。 .on('error', e => { console.error('[' + new Date() + '] Server Error', e); }) .on('clientError', e => { console.error('[' + new Date() + '] Client Error', e); }) リダイレクトのファイル記述子 0: 標準入力 1: 標準出力 2: 標準エラー出力 2>&1 の意味するところがこれでようやく。 teeコマンド コンソールとファイルの両方に出力 node index.js 2>&1 | tee -a application.log pipeメソッド fsモジュールのcreateReadStreamメソッドを利用。 指定したパスのページを読み込む準備をする。 Node.js では Stream の形式のデータは、読み込み用の Stream と書き込み用の Stream を繋つないでそのままデータを受け渡すことができる。 読み込んだStreamをhttpサーバーのレスポンスに渡す。 const rs = fs.createReadStream('./form.html'); rs.pipe(res); なお、pipeはres.endを内部的に実行している。 URLエンコード POSTされたデータはurlエンコードされた状態で送信されるので、decodeURIComponentを使って元の値に戻す。 また、querystringモジュールのparseメソッドでクエリを配列に格納できる。 const decoded = decodeURIComponent(rawData); const qs = require('querystring'); const answer = qs.parse(decoded); まとめ ここまでやっておいてですが、ApacheとHTTPサーバーって同じもの? Apacheはどちらかといえばソフトウェアになるんだろうか。 今回サーバーとやりとりするにあたって、改めてNode.jsってすごいと思った。PHPでやってたことがJavaScriptでできるのかって。 さて、次回はPUGを使って色々やるみたいです。

Viewing all articles
Browse latest Browse all 9130

Trending Articles