如何在 Angular 中传递数据库查询 获取 API URL

How to pass database query in Angular Get API URL

提问人:Shilpa 提问时间:11/15/2023 更新时间:11/15/2023 访问量:31

问:

我在从组件执行的服务文件中有以下函数,我想从下面的函数中准备一个获取 URL。

getStartEndTime(body) {
    const query = `select min(shiftstart) starttimeofmonth,max(shiftend) endtimeofmonth from ShiftCalendarDeDup where lineid=${body.lineId} and factoryid=${body.factoryId} and businessdate between ${body.firstDay} and ${body.lastDay}`;
    return this.http.get(`${environment.apiDFOS3BaseUrl}/dfosbroker/generic/query/${query}`);
  
  }

但上面的代码在“网络”选项卡中生成以下 URL

网址 :

https://dfos-qa.unilever.com/dfosbroker/generic/query/select%20min(shiftstart)%20starttimeofmonth,max(shiftend)%20endtimeofmonth%20from%20ShiftCalendarDeDup%20where%20lineid=E_A571_A%20and%20factoryid=E_A571%20and%20businessdate%20between%202023-10-01%20and%202023-10-31

我的预期输出

https://dfos.unilever.com/dfosbroker/generic/query/select min(shiftstart) starttimeofmonth,max(shiftend) endtimeofmonth from ShiftCalendarDeDup where lineid='R_A002_MAFLRIA1' and factoryid='R_A002' and businessdate between '2023-10-01' and '2023-10-31'

谁能帮我获得预期的输出。

javascript jquery angular 打字稿 angular8

评论

1赞 D A 11/15/2023
是的,从 UI 构建此类数据库查询是错误的。它们应该在服务器端进行。
0赞 Yong Shun 11/15/2023
不可能,URL需要URL编码,这就是为什么你会看到一些字符,如空格,单个代码被转换为编码字符。在服务器端,应从查询字符串中提取值并解码以获取编码前的原始值。否则,应将 API 实现为 POST,并在请求正文中接收查询。因此,您不需要对值进行编码。同时,高度关注的是,您的 API 应该有一些机制来防止 SQL 注入。否则,您可能会面临 API 被滥用、数据暴露和表、数据库丢失的问题。
0赞 Yong Shun 11/15/2023
当然,通过您当前的实现,人们已经知道数据库中可用的表和列。
0赞 Andrew Allen 11/15/2023
前端不应该知道后端!您可以通过 angular.dev/guide/http/making-requests#setting-url-parameters 附加查询参数,例如 someUrl/?minbusinessdate=“2023-11-11”。后端应该解析查询参数并负责实现,即实际的数据库查询。

答: 暂无答案