繁体   English   中英

使用Node.js EJS Express显示MySQL查询结果

[英]Displaying mysql query results with node.js ejs express

我在查询mysql数据库并使用express和ejs将结果显示为表时遇到问题。

这就是我的app.js文件的内容

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var mysql = require('mysql');
var pool = mysql.createPool({
    connectionLimit : 10, 
    host        : 'host',
    user        : 'user',
    password    : 'password',
    database    : 'database'
});

module.exports.pool = pool;

...
var list = {};
app.get("/pokemon", function(req,res){
pool.query('SELECT p.pokemon_id AS `pokemon_id`, p.name AS `pokemon_name`, 
t1.name AS `type1`, t2.name AS `type2`, p.evolution_level AS `evLevel` FROM `pokemon` p INNER JOIN `type` t1 ON t1.type_id=p.type1 INNER JOIN `type` t2 ON 
t2.type_id=p.type2', function(err,result){
        if(err){
            throw err;
        } else {
            list = {listResults: result};
            res.render('listResults', list);                
        }
    })
});
...

对于ejs文件

 <table class="table"> <thead> <tr> <th scope="col">#</th> <th scope="col">Name</th> <th scope="col">Type 1</th> <th scope="col">Type 2</th> <th scope="col">Evolution Level</th> <th scope="col">Delete</th> <th scope="col">Update</th> </tr> </thead> <tbody> <% listResults.forEach(function (pokemon) { %> <tr> <th scope="row"><%= pokemon.pokemon_id %></th> <td><%= pokemon.pokemon_name %></td> <td><%= pokemon.type1 %></td> <td><%= pokemon.type2 %></td> <td><%= pokemon.evLevel %></td> <td><button class="btn btn-sm btn-danger">Delete</button></td> <td><a class="btn btn-sm btn-success" href="#" role="button">Update</a></td> </tr> <% }) %> </tbody> </table> 

当我尝试转到该页面时,出现错误消息,提示“未定义listResults”,引用了.forEach行。

我不习惯EJS,我通常使用Handlebars作为模板引擎,但是由于您将Express中的数据作为名为list的对象进行传递:

res.render('listResults', list);

您是否尝试过使用list.listResults

<% list.listResults.forEach(function (pokemon) { %>
  <tr>
    <th scope="row"><%= pokemon.pokemon_id %></th>
    <td><%= pokemon.pokemon_name %></td>
    <td><%= pokemon.type1 %></td>
    <td><%= pokemon.type2 %></td>
    <td><%= pokemon.evLevel %></td>
    <td><button class="btn btn-sm btn-danger">Delete</button></td>
    <td><a class="btn btn-sm btn-success" href="#" role="button">Update</a></td>
  </tr>
<% }) %>

尝试这个

if(err){
throw err;
}else{
qryResults=res.rows;
res.render('ejsFileName',{listResults:qryResults}
);
}

qryResults变量将保存查询结果集,然后listResults将在ejs文件中用于循环语句

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM