【发布时间】:2020-04-04 05:24:02
【问题描述】:
我是 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 中查看查询结果而不是查询本身,我在这里缺少什么?
【问题讨论】:
-
不要传递
todoDbList: db.getAllItems- 这将呈现函数。您想调用该函数,而不是执行response.json(…),而是执行response.render(…)行。 -
@Bergi 我更新了调用函数
todoDbList: db.getAllItems()的路由,并将查询函数更改为.render(results.rows)。这从我的查询文件response.status(200).render(results.rows)的行中给了我TypeError: Cannot read property 'status' of undefined。 -
您是否将参数传递给您的函数?你用参数声明了它。
-
@Bergi 我看到了在 queries.js 中声明请求和响应参数的位置,但我不确定在 app.js 中调用函数时要传递什么。我是否需要将
app.get请求嵌套在呈现 ejs 的请求中? -
是的,您可以从
app.get获得req和res作为回调的参数,您可以将它们传递给getAllItems。
标签: node.js postgresql express ejs