前提・実現したいこと
お世話になります、まだまだ勉強が足りません。
node.js + express でMySQLから取得したデータを
SQL文毎に保存しておき、最後にrenderでまとめて出力したいのですが
セットした変数が空になってしまいます。
発生している問題・エラーメッセージ
var gl_Result = {}; // 上層でグローバル宣言 ...SQL実施後... console.log(gl_Result); // ← {} と表示されるだけ
該当のソースコード
javascript
1// app.js 2var gl_result = {}; 3 4app.set('ejs', ejs.renderFile); 5 const con = mysql.createConnection({ 6 host: 'localhost', 7 user: 'root', 8 password: 'test', 9 database: 'test', 10 }); 11 12app.get('/', (request, response ) =>{ 13 const promise1 = new promise((resolve, reject)=>{ 14 //ここではresolveを書いていませんが実際には使っています 15 var sql = "select * from test"; 16 con.query(sql, function(err, result){ 17 if(err) return console.log(err); 18 gl_result = result; 19 }); 20 }) 21 //...中略(他のSQL処理)... 22 .then(()=>{ 23 console.log(gl_result); // ←ここで {} しか表示されない 24 response.render({data: gl_result, ...}); 25 }); 26}); 27 28app.listen(3000,() =>{ 29 console.log('server start'); 30}); 31
試したこと
オブジェクトとfor文を使ってやってみましたが、
結果は同じでした。
ちなみに result の前後どちらかに console.log(result[0].name); とやると
しっかりと値が表示されます。
for(i in result){ gl_result[i] = new Object(); gl_result[i].name = result[i].name; gl_result[i].age = result[i].age; }
もしくは
function setValue(name, age){ this.name = name; this.age = age; } for(i in result){ gl_result[i] = new setValue( result[i].name, result[i].age ); }
上記でも同様でした。
不足点や懸念点がありましたら、是非ともご教示ください。
答えでは無くても「こうしたらどう?」というのでも構いません。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/21 00:29 編集
2021/01/21 06:35
2021/01/21 06:44
2021/01/21 07:09