【问题标题】:how to check for correct query and error handle it?如何检查正确的查询和错误处理呢?
【发布时间】:2020-06-11 05:59:48
【问题描述】:

使用我的 api 我有 '/api/students' 将生成所有学生姓名,当输入 req.query(例如姓名)时,如果 req.query 为“John”,则端点变为'/api/students?name=John'。我使用正则表达式来检查和控制输入只允许字符和空格

const re = /^[a-zA-Z ]*$/;
if (!re.test(name)){//error code

这将允许我检查是否没有输入数字或特殊字符,但如果用户不小心将端点输入为'/api/students?firstnames=John',例如,他们将收到按照“/api/students”而不是它的所有名称错误处理并将其作为错误请求返回?

【问题讨论】:

    标签: javascript mysql express


    【解决方案1】:

    如果我正确理解您的问题,您的问题在于查询参数name 与查询参数firstnames。在我看来,你不应该让用户决定他可以输入哪些查询参数类型(例如name、age 等),而是在 UI 中控制它(这就是你通常看到的“过滤器”在网站上)。

    在我看来,API 忽略了未知查询参数 firstnames,因此它会响应所有学生。一旦 API 接收到未知的查询参数类型(例如 firstnames),您就可以在 API 端点实现中捕获任何不需要的查询参数,如响应 400 BAD REQUEST。

    关于“如何检查”。我认为您在使用正则表达式检查查询参数的实际值方面走在了一条非常好的道路上。根据您选择的解决方案(UI 端检查、API 端检查或两者兼有),您可以执行以下操作来控制查询参数类型:

    UI 方面:

    1. 不要让用户随意输入查询参数类型
    2. 获取特定查询参数类型的用户输入,例如name
    3. 为特定查询参数编写查询字符串,并使用与参数相关的用户输入

    API 端:

    1. 检查查询参数的有效性(它们不能是未知的)
    2. 如果查询中有任何未知的查询参数,请回复400 BAD REQUEST,而不是忽略未知的查询参数

    【讨论】:

    • 是的,但是说用户在 url 中输入了一个错字: url/api/students?names=John 而不是 name。我们如何检查查询名称并将其与 express 进行比较,而服务器默认不响应所有名称。是的,专注于服务器端而不是 ui。
    • 所以我猜你正在使用 express.js 来实现你的 API。请求查询是一个对象,请参见此处:expressjs.com/en/4x/api.html#req -> 您可以做的是读取 req.query 的所有对象属性,将它们与已知查询参数的数组进行比较,如果有任何未知数则抛出错误。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多