node.js - 端点冲突
问题描述
每当我执行以下端点时,我都会收到 ID 类型错误。
Request GET /lists/45 failed with status code 500. error: invalid input syntax for type uuid: "45"
有问题的端点:
// @get('/blabla/{color}', { //---> Works!
@get('/lists/{color}', { //---> Error!
responses: {
'200': {
description: 'Query all lists by color',
},
},
})
async getListByColor(@param.path.string('color') color: number): Promise<number> {
return this.listsRepository.dataSource.execute("SELECT * FROM public.lists as li WHERE li.color = " + color);
}
另一个端点工作正常:
@get('/lists/{id}', {
responses: {
'200': {
description: 'Lists model instance',
content: {
'application/json': {
schema: getModelSchemaRef(Lists, {includeRelations: true}),
},
},
},
},
})
async findById(
@param.path.string('id') id: string,
@param.filter(Lists, {exclude: 'where'}) filter?: FilterExcludingWhere<Lists>
): Promise<Lists> {
return this.listsRepository.findById(id, filter);
}
解决方案
这 2 个端点,/lists/{color}
对于/lists/{id}
REST 路由器来说是无法区分的,因为两条路径都将解析为/lists/{an arbitrary string}
. 因此,路由器可能会将流量路由到需要 UUID 数据类型 ID 的错误端点。因此,数据库引擎级错误。
另请注意,第一个示例容易受到 SQL 注入攻击。请考虑改用参数化 SQL。
推荐阅读
- charts - SwiftUI 图表到 ShareSheet
- batch-file - 在循环中分配变量(批处理文件)
- r - R函数以字符形式获取文件的目录名称
- c++ - 初始化具有指向另一个类的成员变量的成员指针的类向量
- reactjs - 您将如何使用 Next.js “重定向”到登录表单?
- indexing - Excel 中的 INDEX MATCH 公式在某些单元格中返回不正确的结果,在其他单元格中返回正确的结果
- postgresql - 为什么我在 postgresql 中看不到用户权限?
- javascript - 如何将数组从 Javascript 传递给控制器的动作?
- c - 将 sizeof() 应用于 const char *array[] 中的元素
- html - 网格区域 css 无法在 chrome 上正确工作