Node.js “从数据库获取数据时出现问题”;渲染“;函数误差
我是一个新手,我在Postgres中创建了一个数据库来提取关于博客文章的数据,将信息放在ejs文件中。 我得到一个错误:Node.js “从数据库获取数据时出现问题”;渲染“;函数误差,node.js,postgresql,express,Node.js,Postgresql,Express,我是一个新手,我在Postgres中创建了一个数据库来提取关于博客文章的数据,将信息放在ejs文件中。 我得到一个错误: Cannot read property 'send' of undefined 我尝试使用res和req调用db.getPosts(),但无法再次设置头,返回错误 我的query.js文件中有问题的代码块: const getPosts = (_req, res) => { pool.query('SELECT * FROM blog_posts', (e
Cannot read property 'send' of undefined
我尝试使用res
和req
调用db.getPosts()
,但无法再次设置头,返回错误
我的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()
,但我并没有真正获得正确的数据格式,它只是显示在浏览器中
非常感谢。在getPosts方法中,不要使用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;
})
}
app.get("/blog", async function (req, res) {
const posts = await db.getPosts();
res.render("blog", { posts: posts });
});
在调用getposts时还需要使用async await,因为它是一个异步函数。更新代码,如下所示
const getPosts = () => {
pool.query('SELECT * FROM blog_posts', (error, results) => {
console.log(error);
// console.log(results.rows);
if (error) {
throw error
}
return results.rows;
})
}
app.get("/blog", async function (req, res) {
const posts = await db.getPosts();
res.render("blog", { posts: posts });
});
在getPosts方法中,不要使用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;
})
}
app.get("/blog", async function (req, res) {
const posts = await db.getPosts();
res.render("blog", { posts: posts });
});
在调用getposts时还需要使用async await,因为它是一个异步函数。更新代码,如下所示
const getPosts = () => {
pool.query('SELECT * FROM blog_posts', (error, results) => {
console.log(error);
// console.log(results.rows);
if (error) {
throw error
}
return results.rows;
})
}
app.get("/blog", async function (req, res) {
const posts = await db.getPosts();
res.render("blog", { posts: posts });
});
使
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})
});
});
使
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})
});
});
Wait在这种情况下不起作用,因为函数既没有返回承诺,也没有回调是异步的
posts
在您的路由中将未定义
是的,它们未定义,您知道为什么吗?@MartaP与此问题无关,答案在这里Wait在这种情况下不起作用,由于函数都没有返回承诺,回调也没有异步,因此路由中的posts将是未定义的
是的,它们是未定义的,你知道为什么吗?@MartaP与此问题无关,答案在这里