Проблема с получением данных из базы данных, ошибка функции render - PullRequest
1 голос
/ 21 мая 2019

Я новичок в выражении, и я создал базу данных в 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 ]

1 голос
/ 21 мая 2019

Сделать 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})
    });
});
0 голосов
/ 21 мая 2019

в вашем методе getPosts не используйте send. просто верните результаты. обновите ваш код, как показано ниже.

const getPosts = () => {
    pool.query('SELECT * FROM blog_posts', (error, results) => {
        console.log(error);
        // console.log(results.rows);
        if (error) {
            throw error
        }
        return results.rows;
    })
}

также вам нужно использовать async await при вызове getposts, так как это асинхронная функция. обновить код, как показано ниже.

app.get("/blog", async function (req, res) {
    const posts = await db.getPosts();
    res.render("blog", { posts: posts });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...