Node.js显示[object Object]而不是result.row

时间:2019-03-06 18:28:27

标签: node.js postgresql

我正在使用postgresql版本11,并且有一个id = 3且带有发布字段(文本类型)的用户。当我想显示数据库中的帖子时,它显示[object Object]而不是id = 3的帖子

const express = require('express');
const app = express();
const { Pool, Client } = require('pg')
const connectionString = 'postgresql://postgres:1111@localhost:5432/netSecure'


const pool = new Pool({
    connectionString: connectionString,
})

app.get('/h', (req, res) => {
    pool.query('SELECT post from users where id=3', (err, result) => {
        if(err) return console.log('error in query',err);
        console.log(result.rows);
        res.render('posts.pug', {
            post: result.rows
        });
        res.end();
    });
app.listen(3000, () => console.log('http://localhost:3000'))

带有#{post}的Pug文件:

  body
    form(action='/posts',method='post')
        label(for='exampleFormControlTextarea1') Enter Your Post
        textarea(autofocus='', placeholder='Post your message here...')#exampleFormControlTextarea1.form-control(rows='3')
        button(type="button").send Send
    form(action='/logout',method='post')
        button.logout Logout
    p #{post}

我在哪里弄错了?

2 个答案:

答案 0 :(得分:1)

问题似乎是您尝试console.log的格式不是字符串格式;这就是为什么您看到[Object object]的原因。

要记录您实际想要的内容,请考虑首先使用JSON.stringify(result.rows)将对象转换为字符串。

答案 1 :(得分:1)

[object Object]是javascript中对象的默认toString表示形式。

似乎您只想检索一个id = 3的帖子。所以首先您需要提取一个结果,因为无论如何,postgresql都会为您提供结果数组。

然后,您需要处理JSON对象,以使其不显示为[object Object]。为了快速解决,您可以使用JSON.stringify()

这是您的代码段

app.get('/h', (req, res) => {
    pool.query('SELECT post from users where id=3', (err, result) => {
        if(err) return console.log('error in query',err);
        // need to check if post exists
        let post = (result.rows.length > 0) ? result.rows[0] : null;
        let postInString = JSON.stringify(post);
        console.log(postInString);
        res.render('posts.pug', {
            post: postInString,
        });
        res.end();
    });