【Node.js+EJS+SQLite3】異なるテーブルからデータを抜き出し、EJSに表示させたい。

初めて質問させていただきます。初学者のため、足りない情報などあるかと思いますので、その都度ご指摘いただければと思います。

実現したいこと

フォーム画面を作成したい。

  • プルダウンの中身をデータベースから引っ張って表示させたい。
  • 引っ張るテーブルはそれぞれ異なる。(2つ以上のテーブルから参照する
  • プルダウンの個数は2個以上

発生している問題・エラーメッセージ

31| </select> 32| </div> >> 33| <% for(let i in check_data){ %> 34| <div class="mb-2"> 35| <label class="form-label" for="date"><%= check_data[i].item %></label> 36| <div class="form-check form-switch"> check_data is not defined

該当のソースコード

form.js

1var express = require('express'); 2var router = express.Router(); 3 4//load the sqlite 5const sqlite3 = require('sqlite3'); 6const db = new sqlite3.Database('./MEIS.db'); 7 8/* Join to User*/ 9router.get('/form', function(req, res,next) { 10 db.all("SELECT * FROM "+'"'+req.query.user+'"', (err, rows) =>{ 11 if (err) { 12 console.log("DBのユーザー情報に異常があります。"); 13 return; 14 } 15 let form_opt ={form_data:rows} 16 res.render('pages/form',form_opt); 17 }); 18 db.all("SELECT * FROM "+'"'+req.query.check+'"', (err, rows) =>{ 19 if (err) { 20 console.log("DBの点検項目に異常があります。"); 21 return; 22 } 23 let check_opt ={check_data:rows} 24 res.render('pages/form',check_opt); 25 }); 26}); 27 28module.exports = router;

form.ejs

1<%- include('../partials/head'); %> 2 <%- include('../partials/header'); %> 3 <main> 4 <div class="container"> 5 <form action="" method="post"> 6 <div class="mb-2"> 7 <label class="form-label" for="date">日時を選択してください。</label> 8 <input class="form-control" type="date" id="today"> 9 <script> 10 var date = new Date(); 11 var yyyy = date.getFullYear(); 12 var mm = ("0"+(date.getMonth()+1)).slice(-2); 13 var dd = ("0"+date.getDate()).slice(-2); 14 document.getElementById("today").value=yyyy+'-'+mm+'-'+dd; 15 </script> 16 </div> 17 <div class="mb-2"> 18 <label class="form-label" for="date">ユーザーを選択してください。</label> 19 <select class="form-select"> 20 <% for(let i in form_data){ %> 21 <option value="<%= form_data[i].id %>"><%=form_data[i].name%></option> 22 <%}%> 23 </select> 24 </div> 25 <% for(let i in check_data){ %> 26 <div class="mb-2"> 27 <label class="form-label" for="date"><%= check_data[i].item %></label> 28 <div class="form-check form-switch"> 29 <input class="form-check-input" type="checkbox" id="flexSwitchCheckDefault"> 30 <label class="form-check-label" for="flexSwitchCheckDefault">Default switch checkbox input</label> 31 </div> 32 </div> 33 <%}%> 34 </form> 35 </div> 36 </main> 37<%- include('../partials/footer'); %>

個人的に以下の箇所が問題であると考えています。

form.js

1router.get('/form', function(req, res,next) { 2 db.all("SELECT * FROM "+'"'+req.query.user+'"', (err, rows) =>{ 3 if (err) { 4 console.log("DBのユーザー情報に異常があります。"); 5 return; 6 } 7 let form_opt ={form_data:rows} 8 res.render('pages/form',form_opt); 9 }); 10 db.all("SELECT * FROM "+'"'+req.query.check+'"', (err, rows) =>{ 11 if (err) { 12 console.log("DBの点検項目に異常があります。"); 13 return; 14 } 15 let check_opt ={check_data:rows} 16 res.render('pages/form',check_opt); 17 }); 18});

試したこと

  • db.serializeでの同期化
  • form.ejsの記載ミスの確認。(片方を消して、動作を確認しましたが、片方ずつなら表示されます。

res.renderが2箇所記載されているのが問題でしょうか?db.allの外でできれば良いのですが、外で記述してしまうとそれもエラーになってしまい困っております・・・

補足情報(FW/ツールのバージョンなど)

  • Node.js : 18.12.1
  • EJS : 3.1.8
  • Express : 4.18.2
  • SQLite3 : 5.1.4

コメントを投稿

0 コメント