我表示非常陌生,我在Postgres中创建了一个数据库,以提取有关博客文章的数据,以将信息放置在ejs文件中。 我收到错误消息:
Cannot read property 'send' of undefined
我尝试用db.getPosts()
和res
调用req
,但是无法再次设置标头,返回错误。
我的query.js
文件中有问题的代码块:
const getPosts = (_req, res) => {
pool.query('SELECT * FROM blog_posts', (error, results) => {
console.log(error);
// console.log(results.rows);
if (error) {
throw error
}
return res.send(results.rows );
})
}
send(results.rows)
或在render('blog', {posts: results.rows})
上调用的res
给出了完全相同的错误。
server.js
中应该使用此数据的功能如下:
app.get("/blog", function (req, res) {
const posts = db.getPosts();
res.render("blog", { posts: posts });
});
我做错了什么?我缺乏一定的知识,这是肯定的,因此,请您在可以的情况下向我简要说明一下。
此外,send()
函数是使数据在server.js
中运行的正确函数吗?许多教程建议使用json()
,但是我并没有真正获得正确的数据格式,它只是显示在浏览器中。
非常感谢您。
答案 0 :(得分:1)
使getPosts
收到回调:
const getPosts = (callback) => {
pool.query('SELECT * FROM blog_posts', (error, results) => {
console.log(error);
// console.log(results.rows);
if (error) {
throw error
}
callback(results.rows);
})
}
用法类似于:
app.get("/blog", function (req, res) {
db.getPosts(function(rows) {
res.render("blog", {posts: rows})
});
});
答案 1 :(得分:-1)
不要使用send。只需返回results.rows。如下更新代码。
const getPosts = () => {
pool.query('SELECT * FROM blog_posts', (error, results) => {
console.log(error);
// console.log(results.rows);
if (error) {
throw error
}
return results.rows;
})
}
您还需要在调用getposts时使用async await,因为它是异步函数。如下更新代码。
app.get("/blog", async function (req, res) {
const posts = await db.getPosts();
res.render("blog", { posts: posts });
});