Node.js 如何使用node pg在ejs中呈现postgresql结果?
我是node/express/postgres新手,正在尝试构建一个简单的todo应用程序。我试图使用ejs文件呈现视图,但页面显示的不是查询结果,而是查询本身:Node.js 如何使用node pg在ejs中呈现postgresql结果?,node.js,postgresql,express,ejs,Node.js,Postgresql,Express,Ejs,我是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
(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中的查询结果,而不是查询本身?回答我自己的问题,以防其他人有类似的问题 重新配置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);
不要将
传递给odblist:db.getAllItems
——这将呈现函数。您想调用函数,而不是执行response.json(…)
,而是执行response.render(…)
行。@Bergi I更新了调用函数的路径todoDbList:db.getAllItems()
,并将查询函数更改为.render(results.rows)
。这给了我TypeError:无法从我的查询文件response.status(200).render(results.rows)
的行中读取未定义的属性“status”
。是否向函数传递参数?您用参数声明了它。@Bergi我知道我在querys.js中声明了请求和响应参数,但我不确定在我的app.js中调用函数时要传递什么。我是否需要一个应用程序。get
请求嵌套在呈现EJB的请求中?是的,您可以从应用程序获得req
和res
。get
作为回调参数,您可以将它们传递到getAllItems
。