前提・実現したいこと
node.jsとを使って掲示板を作っています。
投稿されたデータを編集する機能を付けてる途中です。
投稿完了ボタンを押したらひとつ前の投稿画面に戻る機能を実装してる途中でエラーが出ました。
発生している問題・エラーメッセージ
C:\Users\user\OneDrive\デスクトップ\Chatアプリ\node-test\routes\messages.js:14 title: channel.rows[0].title, ↑ TypeError: Cannot read property 'rows' of undefined
該当のソースコード
<<<messages.js>>> var express = require('express'); var router = express.Router(); var dayjs = require('dayjs'); var pool = require('../dbConnection'); router.get('/:channel_id', function (req, res, next) { var channelId = req.params.channel_id; var getBoardQuery = "SELECT * FROM channel WHERE channel_id = " + channelId; var getMessageQuery = "SELECT *, to_char(created_at, \'YYYY年MM月DD日 HH24時MI分SS秒\') AS created_at FROM message WHERE channel_id = " + channelId; pool.connect(function (err, client) { client.query(getBoardQuery, function (err, channel) { client.query(getMessageQuery, function (err, messages) { res.render('messages', { title: channel.rows[0].title, channel: channel.rows[0], messageList: messages.rows }); }); }); }); }); router.post('/:channel_id', function (req, res, next) { var messages = req.body.message; var channelId = req.params.channel_id; var createdAt = dayjs().format('YYYY-MM-DD HH:mm:ss'); var query = "INSERT INTO message (message, channel_id, created_at) VALUES ('" + messages + "'," + "'" + channelId + "'," + "'" + createdAt + "')"; pool.connect(function (err, client) { console.log(err) client.query(query, function (err, rows) { console.log(err) res.redirect('/messages/' + channelId); }); }); }); module.exports = router; <<<update.js>>> var express = require('express'); var router = express.Router(); var dayjs = require('dayjs'); var pool = require('../dbConnection'); router.get('/:messages_id', function (req, res, next) { var messageId = req.params.messages_id; var getQuery = "SELECT *, to_char(created_at, \'YYYY年MM月DD日 HH24時MI分SS秒\') AS created_at FROM message WHERE messages_id = " + messageId; pool.connect(function (err, client) { client.query(getQuery, function (err, message) { console.log(message.rows); res.render('update', { title: message.rows[0].title, messageList: message.rows }); }); }); }); router.post('/:messages_id', function (req, res, next) { var channelId = req.body.channel_id; var update = req.body.update; var messageId = req.params.messages_id; var createdAt = dayjs().format('YYYY-MM-DD HH:mm:ss'); var query = "UPDATE message SET message = " + update + ", created_at = " + createdAt + "WHERE messages_id = " + messageId; pool.connect(function (err, client) { console.log(err); client.query(query, function (err, rows) { console.log(err); res.redirect('/messages/' + channelId); }); }); }); module.exports = router;
・SQL 文にパラメーターを渡すときは、文字列結合せずにプレースホルダーを使いましょう。
https://qiita.com/hyakuson/items/68ccdb2e50b45759586e
https://node-postgres.com/features/queries/
・pool.connect で得られた client は必ず client.release する必要がありますが、エラーの素なので、pool.query を使った方が良いようです。
https://node-postgres.com/features/pooling/
ありがとうございます。修正してからまた質問投稿しようと思います。

回答1件
あなたの回答
tips
プレビュー