簡易掲示板を作りたい、node.js+expressで ③/nodebbs/msgで投稿する

投稿

送信ボタンを押したら入力された文字を保存できるようにしていこう。

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

カテゴリー: したい タグ: , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です