【问题标题】:Accepting '#' in query string in Joi在 Joi 的查询字符串中接受“#”
【发布时间】:2021-06-16 14:42:41
【问题描述】:

我有一个接受用户名作为查询字符串的端点,但这个用户名可能在开头有 # 所以在 Joi 我得到了这个

{
    "code": 1021,
    "message": "Request data model validation has failed",
    "id": "276ba99a-2abc-4505-b66a-dad2a8ger5",
    "explanation": [
        "`username` is not allowed to be empty"
    ]
}

如何使用 Joi 让我的查询字符串在开头接受 #?

【问题讨论】:

    标签: javascript node.js joi


    【解决方案1】:

    您必须在将参数添加到 URL 之前对其进行编码。

    const url = 'https://example.com?username=#allia';
    const response = await fetch(encodeURIComponent(url));
    

    或者您可以将# 替换为%23

    【讨论】:

    • 你可能想给他一个用encodeURIComponent之类的编码的通用解决方案。
    • @Martial 谢谢我知道,但我想知道我是否可以通过 Joi 来完成,或者是否有任何其他方式,所以我不会强制我的 api 的消费者在发送参数之前对其进行编码跨度>
    • @MatJ 我对 Joi 一无所知。这就是为什么我没有提到encodeURIComponent,因为可能 Joi 有自己的编码过程。
    • @allia 由于#在URL中被解释,如果用户想用这个符号发送数据,他们无论如何都必须对其进行编码。
    • @Martial,没问题。 joi 是关于对象验证的,输入卫生必须与验证分开进行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2016-07-07
    • 2018-04-13
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多