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)
})
}
我正在设置我的第一个 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)
})
}