代码之家  ›  专栏  ›  技术社区  ›  Roman Roshchuk

如何向EJS网页显示数据库内容?

  •  0
  • Roman Roshchuk  · 技术社区  · 6 年前

    所以我有一个包含以下代码的javascript页面: 故事.js:

    var express = require('express');
    var dbcon = require('./app/db/databaseconnection');
    
    var app = express();
    var router = express.Router();
    dbcon.createTable();
    var filepath = __dirname + '/views/';
    app.set('view engine', 'ejs');
    app.use(express.static(__dirname + '/public'));
    app.use('/', router);
    
    var results = dbcon.getProducts().then(results => {
         return results;
     }).catch(err => { console.log(err) })
    
    router.get('/', (request, response) => response.render(filepath + 'index', { page_name: 'home' }));
    router.get('/store', (request, response) => response.render(filepath + 'store', { page_name: 'store', products: results }));
    router.get('/about', (request, response) => response.render(filepath + 'about', { page_name: 'about' }));
    router.get('/contact', (request, response) => response.render(filepath + 'contact', { page_name: 'contact' }));
    router.get('/build', (request, response) => response.render(filepath + 'build/build'));
    router.get('/learn', (request, response) => response.render(filepath + 'learn/learn'));
    app.use('*', (request, response) => response.render(filepath + '404', { page_name: '404' }));
    app.listen(3000, () => console.log("Server running at Port 3000"));
    

    我还有一个包含数据库内容的javascript页面: 数据库连接.js:

    const mysql = require("mysql");
    
    const pool = mysql.createPool({
      connectionLimit: 10, 
      host: "localhost",
      user: "root",
      password: "LOTOS123l",
      database: "dbComputerStore"
    });
    
    module.exports = {
      getProducts: () => new Promise((resolve, reject) => {
        pool.query("SELECT * FROM products", (error, results, fields) => {
          if (error) {
            reject(error);
          } else {
            resolve(results);
          }
        });
      }),
      createTable: () => new Promise((resolve, reject) => {
        PRIMARY KEY NOT NULL, image LONGBLOB NOT NULL)", (error, results, fields) => {
          pool.query("SELECT * FROM pimages", (error, results, fields) => {
          if (error) {
            reject(error);
          } else {
            resolve(results);
            console.log(results);
          }
        });
      }),
      populatetable: () => new Promise((resolve, reject) => {
        pool.query();
      })
    };
    

    然后我有我的EJS页面,我正试图显示给: 商店.ejs

    <!DOCTYPE html>
    <html>
    
    <head>
        <title>PC Store | Store</title>
        <% include partials/header %>
    </head>
    
    <body>
        <header>
            <% include partials/navbar %>
        </header>
        <main>
            <div class="container">
            <% console.log(products); %>
            </div>
        </main>
        <footer>
            <% include partials/footer %>
        </footer>
    </body>
    
    </html>   
    

    目前,我将它设置为console.log,因为我正在尝试查看信息是否正在传递。然而,它不是,它说承诺已经解决。那么我如何将我的数据库内容显示到EJS页面。我正在尝试建立一个网上商店,我想知道我会怎么做。感谢您的帮助!

    在一些帮助下,我能够将数据库内容存储到store.js,但仍然无法将内容从store.js获取到store.ejs页面。

    1 回复  |  直到 6 年前
        1
  •  0
  •   ug_    6 年前

    你将一个承诺传递给EJS进行渲染,你需要传递这个值。更改渲染函数以解决产品承诺并将结果转发给EJS。例如:

    router.get('/store', (request, response) => {
        return productPromise.then(results => {
            return response.render(filepath + 'store', { page_name: 'store', products: results });
        });
    });
    

    每次请求时,交替从数据库获取产品:

    router.get('/store', (request, response) => {
        return dbcon.getProducts().then(results => {
            return response.render(filepath + 'store', { page_name: 'store', products: results });
        });
    });