首页 > 解决方案 > TypeError:无法读取未定义的属性“行”

问题描述

在您的 React 应用程序中遵循Postgres 入门时,在您处理和导出 getMerchants、createMerchant 和 deleteMerchant 函数时,我收到此错误 - TypeError: Cannot read property 'rows' of undefined, what is going on这里??这可能是我想念的非常小的东西。getMerchants 和 resolve(results.rows) 出现错误

const Pool = require('pg').Pool
const pool = new Pool({
    user: 'my_user',
    host: 'localhost',
    database: 'my_database',
    password: 'root',
    port: 5432,
});

const getMerchants = () => {
    return new Promise(function(resolve, reject) {
        pool.query('SELECT * FROM userIds ORDER BY id ASC', (error, results) => {
            if (error) {
                reject(error)
            }
            resolve(results.rows);
        })
    })
}
const createMerchant = (body) => {
    return new Promise(function(resolve, reject) {
        const { name, email } = body
        pool.query('INSERT INTO userIds (name, email) VALUES ($1, $2) RETURNING *', [name, email], (error, results) => {
            if (error) {
                reject(error)
            }
            resolve(`A new merchant has been added added: ${results.rows[0]}`)
        })
    })
}
const deleteMerchant = () => {
    return new Promise(function(resolve, reject) {
        const id = parseInt(Request.params.id)
        pool.query('DELETE FROM userIds WHERE id = $1', [id], (error, results) => {
            if (error) {
                reject(error)
            }
            resolve(`Merchant deleted with ID: ${id}`)
        })
    })
}

module.exports = {
    getMerchants,
    createMerchant,
    deleteMerchant,
}

标签: javascriptpostgresqlexpress

解决方案


根据我的评论:

查询的第二个参数是查询参数,而不是回调函数。传入[],如果你没有参数。除此之外,您的代码看起来在很大程度上是多余的。您应该遵循库提供的正确异步模式,而不是重新创建所有那些无用的承诺......

const getMerchants = () => pool.query('SELECT * FROM userIds ORDER BY id ASC');

然后像这样使用它:

const {rows} = await getMerchants();

推荐阅读