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