node.jsで画像データをPOSTする
node.jsで画像データをPOSTするには、formidableモジュールが必要です。
npmコマンドでインストールします。以下、実行例です。

C:¥nodejs>npm install formidable
npm http GET https://registry.npmjs.org/formidable
npm http 200 https://registry.npmjs.org/formidable
npm http GET https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
npm http 200 https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
formidable@1.0.11 node_modules\formidable
これでformidableモジュールを使うことが出来ます。
function route(handle,pathname,res,postData) {
  if (typeof handle[pathname] === 'function') {
      handle[pathname](res,postData);
  } else {
      res.writeHead(404, {"Content-Type": "text/html"});
      res.end();
  }
}
exports.route = route;
リクエストハンドラも引数にpostDataを増やしています。

function start(res,postData) {
    res.writeHead(200, {"Content-Type": "text/html"});
    var body = '<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" content="text/html; '+
    'charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '<form action="/end" method="post">'+
    '<textarea name="text" rows="20" cols="60"></textarea>'+
    '<input type="submit" value="Submit text" />'+
    '</form>'+
    '</body>'+
    '</html>';
    res.write(body);
    res.end();
}

function end(res,postData) {
        res.writeHead(200, {"Content-Type": "text/plain"});
        res.write(postData);
        res.end();
}

exports.start = start;
exports.end = end;
以下実行例です。最初の画面でsubmit buttonを押します。

初期表示画面


結果画面


node.jsのquerystring
先ほどの結果では、text=POSTデータと表示されてしまっています。
querystringモジュールを使ってPOSTデータだけを取得することが出来ます。
リクエストハンドラを以下のように書き換えるだけです。

var querystring = require("querystring");

function start(res,postData) {
    console.log('rh');
    res.writeHead(200, {"Content-Type": "text/html"});
    var body = '<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" content="text/html; '+
    'charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '<form action="/end" method="post">'+
    '<textarea name="text" rows="20" cols="60"></textarea>'+
    '<input type="submit" value="Submit text" />'+
    '</form>'+
    '</body>'+
    '</html>';
    res.write(body);
    res.end();
}

function end(res,postData) {
        res.writeHead(200, {"Content-Type": "text/plain"});
        res.write(querystring.parse(postData).text);
        res.end();
}

exports.start = start;
exports.end = end;

Back to top

Information