PostgreSQL REST API Node.js CRUD - Ошибка параметра запроса строки - PullRequest
2 голосов
/ 30 января 2020

Я настраиваю свой первый REST API для запроса к настроенной мной базе данных Postgres. У меня есть два метода CRUD, которые в настоящее время работают, что запрос для всех строк в таблице и для строк, где ID = что-то, соответственно.

Проблема, с которой я сталкиваюсь при попытке запроса, когда параметр запроса является String , Вот ошибка, которую я получаю:

ошибка: неверный синтаксис ввода для целого типа: "NaN"

Вот как я настроил свой маршрут GET и URL конечной точки:

const getShowByTitle = (request, response) => {
  const title = request.params.title
  pool.query('SELECT * FROM show WHERE title = $1', [title], (error, results) => {
    if (error) {
      throw error
    }
    response.status(200).json(results.rows)
  })
}

app.get('/show/:title', getShowByTitle)

Ожидаемый результат заключается в том, что отправка запроса GET с использованием заголовка шоу в качестве параметра (String) возвращает ответ JSON только этого шоу.

Буду очень признателен за любую помощь или направление на некоторые полезные ресурсы. Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Здесь есть некоторые проблемы, сначала в SQL имя таблицы должно быть во множественном числе «показывает», во-вторых, вы делаете выбор без кавычек, вам нужно что-то вроде:

"SELECT * FROM show WHERE title = '$1'"

В-третьих, поскольку пользователь может использовать прописные и строчные буквы, вам нужен более надежный способ поиска текста с использованием операторов LIKE, ILIKE и ~, ~ *.

https://www.2ndquadrant.com/en/blog/text-search-strategies-in-postgresql/

В-четвертых, и что более важно, вы не фильтруете строку, и вы рискуете получить инъекцию SQL, потому что "UPDATE admins SET password = 'newsom22th88';" будет выполняться в вашей базе данных.

0 голосов
/ 30 января 2020

После некоторой отладки мой оригинальный код не работал, потому что у меня было несколько совпадений маршрута глагола. Я решил проблему путем создания нового уникального соответствия глагол-маршрут. Ниже мой полный код для запроса с использованием строки. Остальные очки Ааркерио остаются в силе; Мне нужно изменить свой код, чтобы избежать SQL внедрения, а также создать более надежный поиск.

const getShowByTitle = (request, response) => {
  const title = request.params.title
  pool.query('SELECT * FROM show WHERE title = $1', [title], (error, results) => {
    if (error) {
      throw error
    }
    response.status(200).json(results.rows)
  })
}
...