Есть ли преимущество использования $ 1 по сравнению с литералом шаблона с запросами pg-обещания? - PullRequest
1 голос
/ 04 мая 2019

Использование pg-обещание , есть ли преимущество в использовании $1 по сравнению с литералами шаблонов? Шаблонные литералы мне просто более знакомы, но я должен предположить, что с этим пакетом они делают это по-другому.

«Нормальный» путь:

db.any('SELECT * FROM users WHERE active = $1', [true])

Как я это сделал:

const isTrue = true;

db.any(`SELECT * FROM users WHERE active = ${isTrue}`)

ОБНОВЛЕНО Как я это сделал:

const isTrue = true;
const name = 'Matt'
db.any('SELECT * FROM users WHERE active = $1 AND name = $2', [isTrue, name])

OR

const isTrue = true;
const name = 'Matt'
db.any(`SELECT * FROM users WHERE active = $/isTrue/ AND name = $/name/`, {isTrue, name})

1 Ответ

2 голосов
/ 04 мая 2019

есть ли преимущество в использовании $ 1 по сравнению с литералами шаблонов?

Вы не можете использовать литералы шаблонов, которые документация подчеркивает :

ВАЖНО: Никогда не используйте зарезервированный синтаксис ${} внутри строк шаблона ES6, поскольку они не знают, как форматировать значения для PostgreSQL. Внутри шаблонных строк ES6 вы можете использовать только одну из 4 альтернатив - $(), $<>, $[] или $//.

Вы должны использовать Именованные параметры , они предлагают множество преимуществ по сравнению с Индексными переменными :

Для вашего собственного примера, если вам действительно нужны там строки шаблонов:

const isTrue = true;

db.any(`SELECT * FROM users WHERE active = $/isTrue/`, {isTrue})

или вы можете просто использовать стандартные строки:

db.any('SELECT * FROM users WHERE active = ${isTrue}', {isTrue})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...