前提・実現したいこと
POST送信でnullが入ってしまいます。
何故、nullが入ってしまうのでしょうか?
対処法のご教示をお願い致します。
該当のソースコード
javascript
1var http = require('http'); 2fs = require('fs'); 3ejs = require('ejs'); 4qs = require('querystring'); 5var settings = require('./settings'); 6var server = http.createServer(); 7var template = fs.readFileSync(__dirname + '/public_html/bbs.ejs', 'utf-8'); 8var posts = []; 9function renderForm(posts, res){ 10 var data = ejs.render(template, { 11 posts:posts 12 }); 13 res.writeHead(200, {'Content-Type': 'text/html'}); 14 res.write(data); 15 res.end(); 16} 17server.on('request', function(req, res) { 18 if (req.url === '/favicon.ico') { 19 return; 20 } 21 if(req.method == 'POST'){ 22 req.data = ""; 23 req.on("readable", function(){ 24 req.data += req.read(); 25 }); 26 req.on("end", function(){ 27 var query = qs.parse(req.data); 28 posts.push(query.name); 29 renderForm(posts, res); 30 }); 31 }else { 32 renderForm(posts, res); 33 } 34}); 35server.listen(settings.port, settings.host); 36console.log("server listening ...");
ejs
1<html lang="ja"> 2<head> 3 <title>BBS</title> 4 <meta charset="utf-8"> 5</head> 6<body> 7 <form method="post"> 8 <input type="text" name="name"> 9 <input type="submit" value="Post!"> 10 <ul> 11 <% for (var i = 0; i < posts.length; i++ ) { %> 12 <li><%= posts[i] %></li> 13 <% } %> 14 </ul> 15</body> 16</html>
※Chromeで実行すると一度に2回読み込まれてしまうので、下記で対処しています。
javascript
1 if (req.url === '/favicon.ico') { 2 return; 3 }
実行して、テキストボックスに値を入力して(例えば「test」と入力して)、送信ボタンをクリックすると、
testnullと出力されてしまいます。
なぜ、nullが付随してくるのでしょうか?
対処法のご教示をお願い致します。
補足情報(FW/ツールのバージョンなど)
Node.js ejs
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。