【问题标题】:PostgreSQL REST API Node.js CRUD - String query parameter giving errorPostgreSQL REST API Node.js CRUD - 字符串查询参数给出错误
【发布时间】:2020-01-31 03:28:15
【问题描述】:

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

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

错误:整数类型的输入语法无效:“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 请求会返回该节目的 JSON 响应。

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

【问题讨论】:

    标签: node.js postgresql rest crud


    【解决方案1】:

    这里有一些问题,首先在 SQL 中,表的名称应该是复数形式的“shows”,其次你是在不带引号的情况下进行选择,你需要这样的东西:

    "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';”将在您的数据库中执行。

    【讨论】:

    • 有很多关于如何保护您的 API 的好教程:veracode.com/blog/secure-development/… 请记住,发送到您的服务器的所有内容都可能是危险的。祝你好运!
    • 打印值:console.log("this is the value: >>>", title);在 postgres 的 psql 控制台中直接使用该值。
    • 是的,在 API 案例中,您有一个动词 GET、POST、PUSH、DELETE 等和一个路由,并且不能超过一个动词路由匹配,所以看起来路由是已经采取。尝试使用“shows/:title”
    【解决方案2】:

    经过一些调试后,我的原始代码无法正常工作,因为我有多个动词路由匹配。我通过创建一个新的唯一动词路由匹配解决了这个问题。下面是我使用字符串进行查询的完整代码。 Aarkerio 的其他观点仍然成立;我需要更改我的代码以避免 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)
      })
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 2017-06-04
      • 2019-06-29
      • 2016-02-05
      • 1970-01-01
      • 2015-02-02
      相关资源
      最近更新 更多