前提・実現したいこと
Node.js(v10.15.3)+Expressでチャットアプリを作っています。
テンプレートはejsを使用しています。
ログイン後にホーム画面にユーザー名と友達リストを表示したいのですが、うまく友達リストが取得できません。変数やメソッドの位置に問題があるようですが、検索してもよくわかりませんでした。
よろしくおねがいします。
発生している問題・エラーメッセージ
エラーメッセージはないが、postsで友達リストが取得できてないないらしく、表示されない。 ・ユーザー名はejsファイルに正常に表示される <p><%= login.name %></p> ・友達リストは繰り返して表示 <% for(var i in posts) { %> <% var obj = posts[i]; %> <li class="contact"> <div class="wrap"> <img src="<%= obj.icon %>" alt="" /> <div class="meta"> <p class="name"><%= obj.name %></p> <p class="preview"><%= obj.comment %></p> </div> </div> </li>
該当のソースコード
javascript、node.js、express
1 2var express = require('express'); 3var router = express.Router(); 4 5//友達一覧のレコード 6var posts = []; 7 8var mysql = require('mysql') 9var connection = mysql.createConnection({ 10 host: 'localhost', 11 user: 'root', 12 password: '*****', 13 database: 'msgapp3', 14 insecureAuth: true 15}); 16 17//フレンドリストの取得1 18//ここに書いた場合、きちんと友達リストが表示されるが、 19//本来はセッションからidを取得したいのでif文の後に書きたい 20/* 21connection.connect() 22sql = 'select name, icon, comment from users inner join f_relation on users.id = f_relation.friend_id where f_relation.user_id = ?;'; 23var id = 'aaa';//仮に 24connection.query(sql, id, function (err, rows, fields) { 25 if (err) throw err 26 //postsにレコードを代入 27 posts = rows; 28}) 29connection.end() 30*/ 31 32//セッションがなければログイン画面に遷移 33router.get('/', (req, res, next) => { 34 if (req.session.login == null) { 35 res.redirect('/users'); 36 return 37 } else { 38 //セッションがある場合、メイン画面にユーザー名と友達リストを表示したい 39 //フレンドリストの取得2 40 connection.connect() 41 sql = 'select name, icon, comment from users inner join f_relation on users.id = f_relation.friend_id where f_relation.user_id = ?;'; 42 var id = 'aaa';//仮に 43 connection.query(sql, id, function (err, rows, fields) { 44 if (err) throw err 45 //postsにレコードを代入 46 posts = rows; 47 }) 48 connection.end() 49 res.render('index', { login: req.session.login, posts}); 50 } 51}); 52 53module.exports = router; 54
試したこと
友達リストの取得位置を変えると正常に動作する。
2つの位置で何が違うのかわからない。
セッションからIDを取得する方法もわからない。
補足情報(FW/ツールのバージョンなど)
Node.js v10.15.3
Expressを使用
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/06 02:39
2019/09/06 02:48
2019/09/09 00:38
2019/09/09 04:31 編集