POSTなどを受け取る

またまたhttpサーバを。こんどはGET, HEAD, OPTIONS, POSTなどに対応したり。

#!/usr/bin/env node

var http = require('http'),
    dataSection = require('data-section');

dataSection.get(function(err, data) {

  var server = http.createServer();

  if (err) {
    throw err;
  }

  server.on('request', function(req, res) {

    var postData;

    if (req.method === 'GET' || req.method === 'HEAD') {
      res.writeHead(200, {
        'content-length': Buffer.byteLength(data.get, 'utf8'),
        'content-type': 'text/html; charset=utf-8'
      });

      if (req.method === 'HEAD') {
        res.end();
      } else {
        res.end(data.get);
      }

      return;
    }

    if (req.method === 'POST') {
      postData = '';
      req.setEncoding('utf8');
      req.on('data', function(data) {
        postData += data;
      });
      req.on('end', function() {
        var responseData = data.post.replace('%s', postData);

        res.writeHead(200, {
          'content-length': Buffer.byteLength(responseData, 'utf8'),
          'content-type': 'text/html; charset=utf-8'
        });
        res.end(responseData);
      });

      return;
    }

    if (req.method === 'OPTIONS') {
      res.writeHead(200, {
        'allow': 'GET, HEAD, OPTIONS, POST',
        'content-length': 0
      });
      res.end();
    }

    res.writeHead(501, {
      'content-type': 'text/html; charset=utf-8'
    });
    res.end(data.other);

  });
  server.listen(process.env.PORT || 3000);
});

/*__DATA__
@@ get
<!DOCTYPE html>
<meta charset="utf-8">
<title>get page</title>
<form action="/" method="POST">
  <label>text: <input type="text" name="text"></label>
  <input type="submit" value="送信">
</form>

@@ post
<!DOCTYPE html>
<meta charset="utf-8">
<title>post page</title>
<style>span {font-weight: bold}</style>
<p><span>%s</span>が入力されました。</p>

@@ other
<!DOCTYPE html>
<meta charset="utf-8">
<title>501 Not Implemented</title>
<p>501 Not Implemented</p>

__DATA__*/

さすがにマンネリ?