【问题标题】:How to display database content to EJS Web Pages?如何将数据库内容显示到 EJS 网页?
【发布时间】:2019-01-08 09:29:04
【问题描述】:

所以我有一个带有以下代码的 JavaScript 页面: Story.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 页面:Databaseconnection.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 页面:store.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,因为我正在尝试查看信息是否正在传递。然而,事实并非如此,它说 Promise Resolved。那么我将如何将我的数据库内容显示到 ejs 页面。我正在尝试建立一个在线商店,我想知道我将如何做到这一点。任何帮助表示赞赏!

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

【问题讨论】:

    标签: javascript mysql node.js ejs


    【解决方案1】:

    您将承诺传递给 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 });
        });
    });
    

    【讨论】:

    • 嘿,还有一件事,我如何在 ejs 页面上显示它?我一直在使用 console.log 来确保一切正常,但是如何在 ejs 上显示内容?
    • @RomanRoshchuk 这是一个关于如何使用 EJS 处理数据的问题。您可能有一个数组或对象。像这样的帖子应该解决这些问题。 stackoverflow.com/questions/38179077/…
    猜你喜欢
    • 2015-08-15
    • 2018-12-30
    • 2021-01-09
    • 2023-04-03
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多