nodejs postgres запрос возврата не определен после запроса транзакции - PullRequest
1 голос
/ 14 марта 2020

У меня проблема в одном из моих API, используя express на nodejs, когда он подключен к postgres дБ. Вот пример моего кода

const Router = require('express-promise-router');
const pool = require('../db/pool');
const router = new Router();

module.exports = router;

router.put('/:id', async (req,res) => {
    const client = await pool.connect();

    try {
        //await client.query('BEGIN');

        const queryText = "UPDATE product SET categoryid=$1, ownerid=$2, title=$3, description=$4, price=$5, stockquantity=$6 WHERE id=$7";
        const result = await client.query(queryText, [req.body.categoryid,req.body.ownerid,req.body.title,req.body.description,req.body.price,req.body.stockquantity,req.params.id]);

        //await client.query('COMMIT');

        const { updatedProduct } = await pool.query("SELECT * FROM product WHERE id = $1 LIMIT 1", [req.params.id]);

        res.json({
            success: true,
            message: "Product updated",
            updatedProduct: updatedProduct
        });
    } catch (error) {
        await client.query('ROLLBACK');

        res.status(500).json({
            success: false,
            message: error.message
        });
    } finally {
        client.release()
    }
});

переменная updatedProduct всегда возвращает неопределенное значение, у кого-нибудь есть решение для этого?

1 Ответ

1 голос
/ 14 марта 2020

query возвращает объект со свойством rows, вам необходимо использовать переменную rows при деструктурировании объекта.

Пример:

const Router = require('express-promise-router');
const pool = require('../db/pool');
const router = new Router();

module.exports = router;

router.put('/:id', async (req,res) => {
    const client = await pool.connect();

    try {
        //await client.query('BEGIN');

        const queryText = "UPDATE product SET categoryid=$1, ownerid=$2, title=$3, description=$4, price=$5, stockquantity=$6 WHERE id=$7";
        const result = await client.query(queryText, [req.body.categoryid,req.body.ownerid,req.body.title,req.body.description,req.body.price,req.body.stockquantity,req.params.id]);

        //await client.query('COMMIT');

        const { rows } = await pool.query("SELECT * FROM product WHERE id = $1 LIMIT 1", [req.params.id]);

        res.json({
            success: true,
            message: "Product updated",
            updatedProduct: rows
        });
    } catch (error) {
        await client.query('ROLLBACK');

        res.status(500).json({
            success: false,
            message: error.message
        });
    } finally {
        client.release()
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...