PostgreSQL REST API Node.js CRUD - 字符串查询参数给出错误

PostgreSQL REST API Node.js CRUD - String query parameter giving error

我正在设置我的第一个 REST API 来查询我设置的 Postgres 数据库。我有两种 CRUD 方法,它们目前可以分别查询 table 中的所有行和 ID = something 的行。

我遇到的问题是在请求参数为字符串时尝试查询时出现的。这是我收到的错误:

error: invalid input syntax for type integer: "NaN"

这是我设置 GET 路由和端点的方式 URL:

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

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

预期结果 是使用节目标题作为参数(字符串)发送 GET 请求 returns 只是该节目的 JSON 响应。

任何对一些有用资源的帮助或指导将不胜感激。谢谢。

这里有一些问题,首先在 SQL 中表的名称应该是复数形式 "shows",其次你要使 select 不带引号,你需要类似:

"SELECT * FROM show WHERE title = ''"

第三,由于用户可以使用大写和小写,您需要一种更强大的方法来使用 LIKE、ILIKE 和 ~、~* 运算符搜索文本。

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

第四,也是更重要的一点,你没有过滤字符串,你有遭受 SQL 注入的风险,因为 "UPDATE admins SET password='newsom22th88';" 将在你的数据库中执行。

经过一些调试后,我的原始代码无法正常工作,因为我有多个动词路径匹配项。我通过创建一个新的唯一动词路径匹配解决了这个问题。下面是我使用字符串查询的完整代码。 Aarkerio 的其他观点仍然成立;我需要更改我的代码以避免 SQL 注入并创建更强大的搜索。

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