У меня есть эта функция, которая обновляет таблицу соответственно. Я уже использовал оператор конвейера (||), чтобы выбрать новые значения или сохранить старые, если в теле запроса для этого поля ничего не было указано, но я понял, что этот метод может не поддерживаться, если столбцов много. Следовательно, есть ли способ, которым можно просто извлечь только те поля, которые введены в тело запроса, а затем вставить их в соответствующие столбцы без использования канала (||)?
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 .: Код работает нормально. Мне просто нужны идеи о том, как обновлять динамически.