Принятие «#» в строке запроса в Joi

#javascript #node.js #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?

Ответ №1:

Вы должны закодировать свой параметр, прежде чем добавлять его в URL-адрес.

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

Или вы можете заменить # на #

Комментарии:

1. Возможно, вы захотите дать ему общее решение о кодировании с encodeURIComponent помощью или что-то в этом роде.

2. @Martial Спасибо, я знаю, но мне интересно, могу ли я сделать это через Joi или есть какой-либо другой способ, поэтому я не буду принуждать потребителя моего api кодировать параметр перед отправкой

3. @MatJ Я ничего не знаю о Дзеи. Вот почему я не упомянул encodeURIComponent об этом, потому что, возможно, у Дзеи есть свой собственный процесс кодирования.

4. @allia С тех пор # интерпретируется в URL, если пользователь хочет отправить данные с помощью этого символа, ему все равно придется его закодировать.

5. @Martial, без проблем. joi речь идет о проверке объекта, в любом случае обработка входных данных должна выполняться отдельно от проверки.