NodeJS:如何将查询结果分配给变量,并使用其填充html表?

时间:2018-11-20 17:52:55

标签: javascript node.js express handlebars.js

几天以来,我一直在练习NodeJS和Express。我想返回一个查询结果,并将其分配给NodeJS中的html表。这是我所做的:

//My controller
exports.mainpage = function(req,res){
        sql = "SELECT * from students";
        var qry = db.query(sql,function (err, result) {
            if (err) throw err;
            return result;
        });
        console.log(qry);
        res.render('layouts/main', qry);
    }

路线:

router.get('/', student_controller.mainpage);

HTML(使用把手):

<table class="table">
    <thead>
      <tr>
        <th>#</th>
        <th>Name</th>
        <th>Gender</th>
        <th>DOB</th>
      </tr>
    </thead>
    <tbody>
    {{#each qry}}
     <td>1</td>
     <td>{{this.name}}</td>
     <td>{{this.gender}}</td>
     <td>{{this.dob}}</td>
    {{/each}}
    </tbody>
  </table>

我遇到了很多错误。我猜我的代码是错误的。请帮助我更正此代码。

2 个答案:

答案 0 :(得分:0)

您收到什么错误?

我将回答最明显的问题,不知道您遇到的所有错误:

最明显的问题是您从未在控制器中定义resultqry

您将数据库查询的结果分配给名为qry的变量,但是随后将未定义和未声明的变量resultqry发送到模板。

使用var qry =代替var resultqry=

var resultqry = db.query(sql,function (err, result) {
    if (err) throw err;
    return result;
});
console.log(resultqry);
res.render('layouts/main', resultqry);

答案 1 :(得分:0)

我的假设是您没有在结果对象中获得结果。这是因为在进行渲染之前,您需要等待结果返回。尝试如下操作:

exports.mainpage = function(req,res){
        sql = "SELECT * from students";       
        db.query(sql)
        .then(result => res.render('layouts/main', result);
        .catch(error => console.log(error) //put your error handler here
        
        
    }