投稿
送信ボタンを押したら入力された文字を保存できるようにしていこう。
POSTで送られてきたデータを取得する
index.htmlのformのactionにmsgとしとく。
<form action="msg" method="POST">
app.jsは
app.post('/nodebbs/msg', (req, res) => {
})
で取得できる。
https://expressjs.com/ja/4x/api.html#app.post.method
req.bodyの中に入ってるそう。
https://expressjs.com/ja/4x/api.html#req.body
扱うために以下2行追加
app.use(express.json()) app.use(express.urlencoded({ extended: true }))
https://expressjs.com/ja/4x/api.html#express.json
https://expressjs.com/ja/4x/api.html#express.urlencoded
そんでapp.postの中身を
console.log(req.body)
フォームからなんか入力して送信するとコンソールに表示された!
データをファイルに保存
ファイル形式何にしようかなと思ったんですが、JSONでいーかなと思った。なのでlog.jsonという空のファイルを作っておく。
Node.jsにははじめからfsモジュールというファイル入出力用のモジュールが組み込まれているそうなのでそれを使う。
const fs = require('fs');
https://nodejs.org/api/fs.html
うーーーんと、取得したデータを一旦オブジェクトにして、JSON形式で書き出して、サーバーローカルのファイルに追記するみたいな感じでどうだろう。
var obj = { name: req.body['user_name'], msg: req.body['user_message'], dt: (new Date()).toJSON() }
こんな。名前と内容と今の時間。これでオブジェクトができた。これをJSON文字列に変換する。
var str = ',' + JSON.stringify(obj)
このままだと”,”が足りないので前につけとく。そしたらファイルに追記
fs.appendFileSync('log.json',str,'utf8')
書き込めた!で、なんかイキっぱなしになってしまうので、最後に
res.redirect('/nodebbs')
とリダイレクトした。あとは読み込みかなー?
参考
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON
https://developer.mozilla.org/ja/docs/Learn/JavaScript/Objects/JSON