Проверка на стороне сервера с помощью socket.io

77
8

Я просто хочу проверить некоторые данные с nodejs и socket.io на стороне сервера.


Поэтому я отправляю данные с помощью socket.emit('validate data', data)


Мой подход все же заключается в том, чтобы сделать это, отправив ответ серверной стороне назад, как это...


socket.emit('validated data', boolean })


.. и получите ответ на стороне клиента так:


socket.on('validated data', function (boolean) {
validationResponse = boolean;
});

Это кажется очень неудобным и неэффективным для только логического.
Я думаю, что это очень общий вопрос о связи между сервером и клиентом с сокетами, поэтому объяснение будет очень полезно.


Есть ли лучшее решение для получения прямого ответа булевых или крошечных данных?

спросил(а) 2020-04-03T22:38:57+03:00 3 месяца, 1 неделя назад
1
Решение
101

Как насчет регулярного выражения для проверки ваших полевых данных? Вы можете хранить эти регулярные выражения в атрибуте в каждом элементе, применяя их по классу ввода. Запустите эти проверки для таких событий, как change или blur, и вам хорошо идти...


<input type="text" regex="(a|b)" />

<input type="text" class="regex typeA" />


jQuery и другие библиотеки JavaScript имеют хорошие плагины проверки формы, но вы также можете создать их самостоятельно:


$('.regex').each(function(el) {
if ($(el).hasClass('typeA')) {
// doValidation
}
});

Если вам нужно использовать свой сервер для проверки ввода пользователя, нет возможности использовать WebSockets или AJAX-запросы для проверки. Конечно, WebSockets производит меньше трафика данных...

ответил(а) 2020-04-03T23:02:24.945864+03:00 3 месяца, 1 неделя назад
38

Мое предположение - нет, на самом деле нет лучшего (то есть более подозрительного) решения в целом. Я лично считаю, что ваш код довольно короткий. Если вам нужен более короткий код, моя единственная рекомендация - использовать более короткие имена идентификаторов.

Если ваш код сервера выполняет только один тип операции, вы можете устранить свои события и просто использовать socket.send(data) с socket.on("message", fn) вместо socket.emit.

ответил(а) 2020-04-03T22:38:57+03:00 3 месяца, 1 неделя назад
39

Мой вопрос заключался в более коротком или более безопасном коде, но как я подозревал:


Я думаю, что это очень общий вопрос о сервере-клиенте связь



.. была ошибка в размышлении о связи на моей стороне.
Проблема в том, что безопасность не лучше, если вы пытаетесь защитить приложение такими процессами, потому что ваш клиент уже мог фальсифицировать возвращаемое логическое значение на стороне клиента.

Итак, в любом случае, я предпочитаю его проверять, но если пользователь отправит сообщение с недопустимым/принятым именем пользователя, сообщение не будет отправлено другим клиентам, а сам клиент получит сообщение типа username already taken.


buddys, извините и спасибо за ваши ответы.
Особая благодарность @ThiefMaster

ответил(а) 2020-04-03T22:38:57+03:00 3 месяца, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема