我在try 在我的函数中允许除=以外的比较标准时遇到了麻烦. 我有一个GET函数,它允许我在给定特定条件的情况下检索数据库中的所有行,例如:

GET http://127.0.0.1:3000/package?size=10

但我想用比标准更高的标准来获得它们,比如:

GET http://127.0.0.1:3000/package?size>8

但是当这样做时,我得到错误"Unknown column 'size>8' in 'where clause'",因为>不能被解析,只有=可以被解析.这是由于事件解析给了我event变量中的"queryStringParameters":{"size>8":""},而第一个变量给了我"queryStringParameters":{"size":"10"},生成了下面的MySQL查询

SELECT * from `package` WHERE `size>8`=''

而不是

SELECT * from `package` WHERE `size`>8

您知道如何配置我的环境以获取正确的事件变量吗?我认为它与我的template.yaml文件有关,但我找不到位置(可能在RequestParameters中?).

推荐答案

由于SQL注入攻击,直接从API客户端获取SQL运算符是不安全的.一种可以改善安全状态的方法是在API上添加另一个参数,以接受您想要执行的操作(eq、neq、gt、lt、lte、gte):

# Size = 10 (eq -> =)
GET http://127.0.0.1:3000/package?op=eq&size=10

# Size > 10 (gt -> >)
GET http://127.0.0.1:3000/package?op=gt&size=10

# Size < 10 (lt -> <)
GET http://127.0.0.1:3000/package?op=lt&size=10

您可以在打印脚本中通过编写类似以下内容的内容来完成此操作:

const opsMap = new Map<string, string>();

opsMap.set("eq", "SELECT * from `package` WHERE `size` = ");
opsMap.set("gt", "SELECT * from `package` WHERE `size` > ");
opsMap.set("lt", "SELECT * from `package` WHERE `size` < ");

function getQuery(op: string, size: number) : string {
   if (opsMap.has(op)) {
     return opsMap.get(op) + size.toString();
   }

   throw new Error("Unknown operator");
}

Typescript相关问答推荐

Angular 垫页分类和垫排序不起作用

错误:note_modules/@types/note/globals.d.ts:72:13 -错误TS 2403:后续变量声明必须具有相同的类型

如何使用另一个类型的属性中的类型

TS 2339:属性切片不存在于类型DeliverableSignal产品[]上>'

React router 6.22.3不只是在生产模式下显示,为什么?

在配置对象上映射时,类型脚本不正确地推断函数参数

使用`renderToPipeableStream`时如何正确恢复服务器端Apollo缓存?

如何在TypeScrip中从字符串联合类型中省略%1值

如何使用类型谓词将类型限制为不可赋值的类型?

是否存在类型联合的替代方案,其中包括仅在某些替代方案中存在的可选属性?

诡异的文字类型--S为物语的关键

有没有可能为这样的函数写一个类型?

记录键的泛型类型

Cypress页面对象模型模式.扩展Elements属性

有没有办法取消分发元组的联合?

为什么S struct 类型化(即鸭子类型化)需要非严格类型联合?

使用ngfor循环时,数据未绑定到表

使用来自API调用的JSON数据的Angular

错误TS7030:并非所有代码路径都返回值.";由tsfig.json中的";Strong";:False引起

VUE 3类型';字符串';不可分配给类型';参考<;字符串&>