Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js “从数据库获取数据时出现问题”;渲染“;函数误差_Node.js_Postgresql_Express - Fatal编程技术网

Node.js “从数据库获取数据时出现问题”;渲染“;函数误差

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

我是一个新手,我在Postgres中创建了一个数据库来提取关于博客文章的数据,将信息放在ejs文件中。 我得到一个错误:

 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与此问题无关,答案在这里