【Node】Node.js ~ 基本編 / ファームデータを処理する ~

■ はじめに

https://dk521123.hatenablog.com/entry/2018/06/05/211900
https://dk521123.hatenablog.com/entry/2018/06/06/191400

の続き。
今回は、ファームデータを処理する。

■ サンプル

bbs.ejs

<!doctype html>
<html lang"ja">
<head>
<meta charset="utf-8">
</head>
<body>
  <form method="post">
    <input type="text" name="bbsContent">
    <input type="submit" value="Click me!">
  </form>
  <ul>
    <% for (var i = 0; i < bbsPosts.length; i++) { %>
    <li><%= bbsPosts[i] %></li>
    <% } %>
  </ul>
</body>
</html>

settings.js

exports.port='18080';
exports.host='127.0.0.1';

server.js

// HTTPモ/File System/EJS(テンプレート)/Query String(Form処理)ジュールを呼び出す
var http = require('http'),
    fileSystem = require('fs'),
    ejs = require('ejs'),
    queryString = require('querystring');

// 外部ファイルから取得
var settings = require('./settings.js');
var server = http.createServer();

var template = fileSystem.readFileSync(__dirname + '/bbs.ejs', 'utf-8');

var bbsPosts = [];

function renderForm(request, response) {
  var data = ejs.render(template, {
    bbsPosts: bbsPosts
  });
  response.writeHead(200, {'Content-Type': 'text/html'});
  response.write(data);
  response.end();
}

server.on('request', function(request, response) {
  if (request.method == 'POST') {
    request.data = "";
    
    request.on("data", function(chunk) {
      var readData = chunk;
      console.log("Read Data : " + readData);
      request.data += readData;
    });

    request.on("end", function() {
      var query = queryString.parse(request.data);
      console.log("BBS Content : " + query.bbsContent);
      bbsPosts.push(query.bbsContent);
      renderForm(bbsPosts, response);
    });
    
  } else {
    renderForm(request, response);
  }
});

server.listen(settings.port, settings.host);
console.log("Server listening...");

関連記事

Node.js ~ 基礎知識 / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2018/06/05/211900