やりたいこと
現在、node.jsで簡単なSNSアプリケーションを開発しており、ユーザーが過去に押した「いいね」のツイートを表示するということをやりたいです。そのために、mysqlでユーザーが過去に押した「いいね」のツイートのIDをDBから取得しようとしています。下の「ためしたこと」でも書いてありますが、sql文を表現しきっているはずなのになぜかうまくいかないです。
エラー文
Cannot read property 'forEach' of undefined at eval (C:\xampp\htdocs\sns_app\views\favorite.ejs:18:15) at favorite (C:\xampp\htdocs\sns_app\node_modules\ejs\lib\ejs.js:691:17) at tryHandleCache (C:\xampp\htdocs\sns_app\node_modules\ejs\lib\ejs.js:272:36) at View.exports.renderFile [as engine] (C:\xampp\htdocs\sns_app\node_modules\ejs\lib\ejs.js:489:10) at View.render (C:\xampp\htdocs\sns_app\node_modules\express\lib\view.js:135:8) at tryRender (C:\xampp\htdocs\sns_app\node_modules\express\lib\application.js:640:10) at Function.render (C:\xampp\htdocs\sns_app\node_modules\express\lib\application.js:592:3) at ServerResponse.render (C:\xampp\htdocs\sns_app\node_modules\express\lib\response.js:1012:7) at Query.connection.query (C:\xampp\htdocs\sns_app\app.js:131:17) at Query.<anonymous> (C:\xampp\htdocs\sns_app\node_modules\mysql\lib\Connection.js:526:10)
実装中のコード
javascript
1app.get('/favorite', (req, res) => { 2 var mysql1 = 'SELECT tweet_id FROM favorite WHERE user_id = ?'; 3 var mysql2 = 'SELECT * FROM tweets WHERE id = '; 4 var mysql3 = 'SELECT * FROM tweets WHERE id = 4 OR id = 3'; 5 6 connection.query( 7 mysql1, 8 [user_id], 9 (error,results)=>{ 10 for (var i = 1, len = results.length; i < len; ++i) { 11 mysql2 = mysql2 + results[0].tweet_id + ' OR id = ' + results[i].tweet_id; 12 } 13 console.log('mysql2>>',mysql2); 14 console.log('mysql3>>',mysql3); 15 }); 16 17 connection.query( 18 mysql2, 19 (error,results)=>{ 20 console.log('favorite>>',results); 21 res.render('favorite.ejs',{user:username,tweets:results,title:"お気に入り"}); 22 }); 23});//app.favorite
実装中のコード
ejs
1<h3><%= title %></h3> 2 <a href="/new_tweet">新規追加</a> 3 <ul> 4 <% tweets.forEach((tweet) => { %> 5 <li class="tweet"> 6 <span class="tweet_content"><%= tweet.content %></span> 7 <% 8 var category; 9 var list =["恋愛","科学","仕事","日常","広告","PC","病院","漫画","映画","ゲーム","政治"]; 10 category = list[tweet.category]; 11 %> 12 <span class="category">#<%= category %></span> 13 <a href="#" class="good_btn">☆<%= tweet.good %></a> 14 </li> 15 <% }); %> 16 </ul>
ためしたこと
sql文がうまく表現できていないのかと思い、console.logに出力させたところ以下のようになりました。
mysql2>> SELECT * FROM tweets WHERE id = 4 OR id = 3 mysql3>> SELECT * FROM tweets WHERE id = 4 OR id = 3 favorite>> undefined ```mysql3となっているのは試しでベタ打ちで書いてみたものです。ちなみに、mysql3をqueryの中に入れると、ちゃんと作動します。 ### バージョン "dependencies": { "ejs": "^3.1.5", "express": "^4.17.1", "jquery": "^3.5.1", "mysql": "^2.18.1" }
回答1件
あなたの回答
tips
プレビュー