Отображение результатов запроса mysql с помощью node.js ejs express

0

У меня возникают проблемы с запросом базы данных 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
    У вас есть опечатка на вашем .ejs файл, listReults вместо listResults
  • 0
    Я проверил, и это только на моей записи здесь, в моем реальном файле это написано правильно. Хороший улов, хотя.
Теги:
express
ejs

2 ответа

0

попробуй это

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

переменная qryResults будет содержать результаты запроса, тогда listResults будет использоваться в файле ejs для оператора цикла

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>
<% }) %>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню