我遇到查询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行。
答案 0 :(得分:0)
我不熟悉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>
<% }) %>
答案 1 :(得分:0)
试试这个
if(err){
throw err;
}else{
qryResults=res.rows;
res.render('ejsFileName',{listResults:qryResults}
);
}
qryResults变量将保存查询结果集,然后listResults将在ejs文件中用于循环语句