首页 > 解决方案 > 如何使用节点 pg 在 ejs 中呈现 postgresql 结果?

问题描述

我是 node/express/postgres 的新手,正在尝试构建一个简单的 todo 应用程序。我正在尝试使用 ejs 文件呈现视图,但页面不显示查询结果,而是显示查询本身:

(request, response) => { pool.query('SELECT * FROM items ORDER BY id ASC', (error, results) => { if (error) { throw error } response.status(200).json(results.rows) }) }

我在 queries.js 文件中生成查询:

const Pool = require('pg').Pool
const pool = new Pool({
    user: '*',
    host: 'localhost',
    database: 'todo',
    password: '*',
    port: 5432,
})

const getAllItems = (request, response) => {
    pool.query('SELECT * FROM items ORDER BY id ASC', (error, results) => {
        if (error) {
            throw error
        }
        response.status(200).json(results.rows)
    })
}

module.exports = {
    getAllItems
}

并在 app.js 文件中调用它:

var express = require("express");
var app = express();
var bodyParser = require("body-parser");
const db = require('./queries');

app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json())

var todoDbList = db.getAllItems;
var itemNames = db.getAllItemNames;

//All todo information
app.get('/items',function(req, res) {
    res.render("allItemInfo.ejs", {
        todoDbList: db.getAllItems
        });
});

然后在 EJS 文件中渲染:

<body>
   <div><h1>Hello World</h1></div>
   <div><%= todoDbList %> </div>
</body>

我在这里缺少什么来查看 div 中的查询结果而不是查询本身?

标签: node.jspostgresqlexpressejs

解决方案


回答我自己的问题,以防其他人有类似的问题。

重新配置querys.js文件中的getAllItems函数来渲染.ejs文件并传入查询结果

const getAllItems = function(req, res) {
    const sql = 'SELECT * FROM items ORDER BY id ASC';
    pool.query(sql, (error, results) => {
        if (error) {
            throw error;
        }
        res.render("allItemInfo.ejs", {todoDbList: results.rows})
    })
};

调用 app.js 文件中的函数

//all todo information
app.get('/todos', db.getAllItems);

推荐阅读