「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

expressを使わないベーシックWebアプリ|node.js

簡単Webアプリケーションw/node.js

1)アプリケーションの構成をURLベースで決める ・URL ・GET or POST ・実行する処理 ・レスポンス

例) / GET トップページを表示する HTMLなど / POST 占い結果を生成して表示する 結果などが含まれるHTML /以外 404ページを表示する

2)必要なモジュールを読み込む

var http = require('http');

3)必要なHTMLコードなどを定義

// ヘッダー
var headerHtml = '\
  …';// フォームvar htmlForm = '</pre>
<form action="/" method="post">\
 …
';

// フッター
var htmlFooter = '…';

4)必要なメソッドなど HTMLエスケープ文字変換など。

function escapeHtmlSpecialChar(html) {
  if (html===undefined) {
    return;
  } else {
    html = html.replace(/&/g, '&amp');
    html = html.replace(/>/g, '&gt');
    html = html.replace(/    return html;
  }
};

5)サーバオブジェクトの準備

var server = http.createServer(onRequest);

6)onRequest関数内ではURLルーティングを行う

・リクエストパスが/以外ならば404表示 ・/でGETの場合は入力フォーム ・/でPOSTの場合は占い結果表示

function onRequest(req, res) {

  //  リクエストパスが/以外ならば404
  if (req.url != '/') {
    response.write(404, {'Content-Type': 'text/plain; charset=UTF-8'});
    response.end('Error 404: Not Found');
    return;
  }

  //  POSTで無い場合はindexを出す。
  if (req.method != 'POST') {
    response.writeHead(200, {'Content-Type': 'text/plain; charset=UTF-8'});
    response.write(htmlHeader);
    response.write(htmlMainForm);
    response.write(htmlFooter);
    return;
  }

  //  POSTの場合
  if (req.method == 'POST') {

    //送信されたデータを取得する
    //requestオブジェクトにdataプロパティを追加している。
    request.data = '';
    request.on('data', function(chunk) {
      request.data += chunk;
    });
    //  endイベントでsendResponseメソッドを叩く
    request.on('end', sendResponse);
    return;
  }

  // endイベントハンドラー
  function sendResponse() {
    //  フォームデータを取得して
    //  結果を表示
    response.writeHead(200, {'Content-type': 'text/html; charset=UTF-8'});
    response.write(htmlHeader);
    response.write(resultHhtml);
    response.write(htmlFooter);
    response.end();
  }
}

7)最後にサーバのリスニング設定

var PORT = 8080;
var ADDRESS = '127.0.0.1';

server.listen(PORT, ADDRESS);
server.log('server running at http://' + ADDRESS);