nodejs でPOSTされたデータを受け付けるには

× app.use(express.bodyDecoder());

◯ app.use(express.bodyParser());


ejs使ってて
Cannot POST / 
とかでたら
POST時のルーティングがないかもしれないので以下のように追加する
app.get('/', routes.index);//GET時
app.post('/',routes.index);//POST時

app.post('/',routes.index);

これは example.com/にPOSTされた時に $NODE_PROGRAM_ROOT/routes/index.jsを見に行くってことらしい

express -e hoge && cd hoge && npm install したあと
app.js

var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.set('view options', { layout: false });
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);
app.post('/',routes.index);
http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

route/index.js

exports.index = function(req, res){

  console.log(req.body); // for logging
  console.log(req.query);
  var name = "";
  if (req.body.name) {
    // postデータはreq.body.xxxで受け取る
    name = req.body.name;

  }
  res.render('post.ejs', { locals: { name: name } });


};

views/post.ejs

<html>
  <head>
    <title>node.jsでPOST</title>
  </head>
  <body>
    <h1>node.jsでPOST</h1>
    <%= name %><br />
    <form method="POST" action="http://example.com:3000/">
      <input type="text" name="name" id="name" />
      <input type="submit" />
    </form>
  </body>
</html>


参考:
http://d.hatena.ne.jp/replication/20110307/1299451484
http://havelog.ayumusato.com/develop/javascript/e214-express_post_params.html