首页 > 解决方案 > 使用 Express 将多个 SQL 结果返回到 .handlebars

问题描述

我对 Express 和 Node.js非常陌生,并且很好奇如何将多个 SQL 结果返回到页面元素。

这可能是一个直截了当的问题,但我不知道如何继续,任何帮助将不胜感激。

所以,我有以下page1.js文件:

module.exports = function(){
   var express = require('express');
   var router = express.Router();

   // Get the results of the first SQL statement
   function getMyTable(res, mysql, context, complete){
      mysql.pool.query("SELECT * from MyTable", function(error, results){
         if(error){
            res.write(JSON.stringify(error));
            res.end();
         }
         context.page1table = results;
         complete();
   }

   // Get the results of the second SQL statement
   function getMyList(res, mysql, context, complete){
      mysql.pool.query("SELECT DISTINCT class from MyTable", function(error, results){
         if(error){
            res.write(JSON.stringify(error));
            res.end();
         }
         context.page1list = results;
         complete();
   }

   // Return to page
   router.get('/',function(req,res){
      var callbackCount = 0;
      var context = {};
      var mysql = req.app.get('mysql');
      getMyTable(res,mysql,context,complete);
      getMyList(res,mysql,context,complete);
      function complete() {
         callbackCount++;
         if(callbackCount >= 2){
            res.render('page1',context);
         }
      }
   }



}();

然后我有一个page1.handlebars文件:

<form id = "list_class">
   <fieldset>
      <label> Classses:
         <select name = "class_list" id = "class_list">
            {{#each page1list}}
            <option value = '{{class}}'>{{class}}</option>
            {{/each}}
         </select>
      </label>
   </fieldset>
</form>

<table class ="resultTable">
  <tbody id = "tableBody">
  {{#each page1table}}
     <tr>
        <td>{{name}}</td>
        <td>{{class}}</td>
        <td>{{id}}</td>
     </tr> 
  {{/each}}
  </tbody>
</table>

编辑:我应该注意显示结果page1table,但结果page1list不显示,尽管调用console.log(context.page1list);infunction getMyList()确实将预期列表打印到控制台。我错过了什么?

标签: mysqlnode.jsexpresshandlebars.jsrouter

解决方案


你确定你没有错过 page1.js 中的任何部分吗?我很好奇为什么当你的括号和花括号没有正确闭合时你没有收到任何错误?

例如:

 // Get the results of the second SQL statement
function getMyList(res, mysql, context, complete){
  mysql.pool.query("SELECT DISTINCT class from MyTable", function(error, results){
     if(error){
        res.write(JSON.stringify(error));
        res.end();
     }
     context.page1list = results;
     complete();
}

您错过了)关闭查询的 a}和关闭功能的 a


推荐阅读