Получение подставных данных postgres.js
Всем привет! Пытаюсь получить данные из таблицы Postgresql с помощью библиотеки postgres.js
Написал вот такой код(Он проверяет, есть ли в теле запроса то или иное значение и ищет столбцы в бд)
export const getQuantity = async (values: values) => {
let v = undefined
if(values.plu !== undefined && v === undefined){
v = `plu=${values.plu}`
}
console.log(v)
if(values.quantity_of_products_in_shop !== undefined && v === undefined){
v = `quantity_of_products_in_shop=${values.quantity_of_products_in_shop}`
}
console.log(v)
if(values.quantity_of_products_in_cart !== undefined && v === undefined){
v = `quantity_of_products_in_cart=${values.quantity_of_products_in_cart}`
}
console.log(v)
if(values.shop_id !== undefined && v === undefined){
v = `shop_id=${values.shop_id}`
}
console.log(v)
const response = await sql`
SELECT
product_name,
quantity_of_products_in_shop,
quantity_of_products_in_cart
FROM products
WHERE ${sql(v)}
`
console.log(response)
return response
}
Но единственным что я получаю из этого кода - ошибка. Уже убирал sql() - встроенная функция из доков к библиотеке, из последнего WHERE, но ничего не помогает
Вот текст ошибки:
PostgresError: столбец "shop_id=1234" не существует
at ErrorResponse (D:\programming\work\test-programm\node_modules\postgres\cjs\src\connection.js:788:26)
at handle (D:\programming\work\test-programm\node_modules\postgres\cjs\src\connection.js:474:6)
at Socket.data (D:\programming\work\test-programm\node_modules\postgres\cjs\src\connection.js:315:9)
at Socket.emit (node:events:513:28)
at Socket.emit (node:domain:489:12)
at addChunk (node:internal/streams/readable:315:12)
at readableAddChunk (node:internal/streams/readable:289:9)
at Socket.Readable.push (node:internal/streams/readable:228:10)
at TCP.onStreamRead (node:internal/stream_base_commons:190:23)
at cachedError (D:\programming\work\test-programm\node_modules\postgres\cjs\src\query.js:170:23)
at new Query (D:\programming\work\test-programm\node_modules\postgres\cjs\src\query.js:36:24)
at sql (D:\programming\work\test-programm\node_modules\postgres\cjs\src\index.js:112:11)
at getQuantity (D:\programming\work\test-programm\src\services\shop.ts:96:31) {
severity_local: 'ОШИБКА',
severity: 'ERROR',
code: '42703',
position: '139',
file: 'parse_relation.c',
line: '3721',
routine: 'errorMissingColumn'
}
Сказано, что столбец shop_id=1234 не существует, но если я выведу в консоль код запроса к базе и проверю его в pgAdmin4, то все сработает
Ответы (2 шт):
Автор решения: Owlly
→ Ссылка
вы передаете строку вида shop_id=1234 напрямую в SQL-запрос через sql(v), а Postgres ожидает конкретное выражение вроде shop_id = 1234
// Строим запрос
const response = await sql`
SELECT
product_name,
quantity_of_products_in_shop,
quantity_of_products_in_cart
FROM products
${conditions.length > 0 ? sql`WHERE ${sql.join(conditions, sql` AND `)}` : sql``}
`;
console.log(response);
return response;
}
Автор решения: nörbörnën
→ Ссылка
Попробуйте так:
export const getQuantity = async (values: values) => {
let v = sql`true`;
if (values.plu !== undefined) {
v = sql`plu=${values.plu}`;
} else if (values.quantity_of_products_in_shop !== undefined) {
v = sql`quantity_of_products_in_shop=${values.quantity_of_products_in_shop}`;
} else if (values.quantity_of_products_in_cart !== undefined) {
v = sql`quantity_of_products_in_cart=${values.quantity_of_products_in_cart}`;
} else if (values.shop_id !== undefined) {
v = sql`shop_id=${values.shop_id}`;
}
const response = await sql`
SELECT
product_name,
quantity_of_products_in_shop,
quantity_of_products_in_cart
FROM products
WHERE ${v}
`;
console.log(response)
return response
}