Динамически обновлять поля в postgres без использования || оператор - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть эта функция, которая обновляет таблицу соответственно. Я уже использовал оператор конвейера (||), чтобы выбрать новые значения или сохранить старые, если в теле запроса для этого поля ничего не было указано, но я понял, что этот метод может не поддерживаться, если столбцов много. Следовательно, есть ли способ, которым можно просто извлечь только те поля, которые введены в тело запроса, а затем вставить их в соответствующие столбцы без использования канала (||)?

 static async updateProduct(req, res) {
        const { id } = req.authData.payload;
        const {
          description, category, imageurl, quantity, unitPrice
        } = req.body;


        try {
          const { rows } = await db.query(queryProductAdmin, [req.params.productId, id]);
          if(!rows[0]) {
            return res.status(404).json({
              status: 'Fail',
              message: 'The product is not available'
            });
          }
          **/** Instead of using the pipe, how can something like this be achieved?
            .update(req.body, { fields: Object.keys(req.body) })*/**
          const values = [
            description || rows[0].description,
            category || rows[0].category,
            imageurl || rows[0].imageurl,
            quantity || rows[0].quantity,
            unitPrice || rows[0].unitPrice,
            req.params.productId,
            id
            ];

            const response = await db.query(updateProductQuery, values);
            const updatedProduct = response.rows[0];
            return res.status(200).json({
              message: 'Update was successful',
              updatedProduct
            });

        } catch(error) {
          const { message } = error;
          return res.status(500).json({
            status: 'Fail',
            message
          });
        } 

N.B .: Код работает нормально. Мне просто нужны идеи о том, как обновлять динамически.

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете сделать что-то вроде:

const values = ['description', 'category', 'imageurl', 'unitPrice']
  .map(v => req.body[v] || rows[0][v])
  .push(req.params.productId, id)

Чтобы пойти немного дальше, вы можете получить поля таблицы с помощью API postgres и отобразить их вместо этого в зависимости от того, отображаете ли вы все поля в массиве запросов или нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...