从数据库获取数据的问题,“渲染”功能错误

时间:2019-05-21 10:22:55

标签: node.js postgresql express

我表示非常陌生,我在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(),但是我并没有真正获得正确的数据格式,它只是显示在浏览器中。

非常感谢您。

2 个答案:

答案 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)

您的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;
    })
}

您还需要在调用getposts时使用async await,因为它是异步函数。如下更新代码。

app.get("/blog", async function (req, res) {
    const posts = await db.getPosts();
    res.render("blog", { posts: posts });
});