Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Получить данные клиента, обработать логикой на сервере, передать результат клиенту (https://javascript.ru/forum/node-js-io-js/82622-poluchit-dannye-klienta-obrabotat-logikojj-na-servere-peredat-rezultat-klientu.html)

John_Medved 02.06.2021 00:44

Получить данные клиента, обработать логикой на сервере, передать результат клиенту
 
Доброго времени суток, уважаемые разработчики.
Прошу вашей помощи. Начал изучать Node js на практике и застрял.
Задача вот в чём: есть десктопное приложение - шифровальщик на electron (html, css, js), которое нужно перереботать в веб. Логика на app.js включая ключ шифрования. Соответственно логика (шифрование) должно происходить на сервере.
Алгоритм:
1. Клиент вводит текст в input (textarea) id="X", нажимает button;
2. Браузер отправляет value из id="X" на сервер;
3. Сервер принимает value из id="X" в переменную и передаёт аргументом в функцию шифрования;
4. Зашифрованный текст передаётся на фронтэнд в textarea Id="y" ;

Это как если бы был калькулятор на сервере, а цифры и кнопки операций на клиенте.

Ребят, прошу меня извинить, если спросил элементарщину, но, правда, перегуглил и переютубил уже везде, но ответа не нашёл. Везде какой то мрак и всё не то.
Заранее благодарю.

ksa 02.06.2021 10:06

Цитата:

Сообщение от John_Medved
Зашифрованный текст передаётся на фронтэнд в textarea Id="y"

Так сразу сервер не передаст... :no:

Но может прислать зашифрованное ответом на
Цитата:

Сообщение от John_Medved
Браузер отправляет value из id="X" на сервер

А вот, получив ответ, клиентский JS может поместить зашифрованное куда нужно.

Т.е. техника тут такая "запрос на сервер -> ответ сервера -> какие-то действия с полученными данными"

ksa 02.06.2021 10:08

Цитата:

Сообщение от John_Medved
Везде какой то мрак и всё не то.

Да брось... :D
Я сам уже несколько месяцев читаю книги по Node.JS и мрака там не замечал.

Основная проблема в том, что книги те не моложе 2017-го года. :(
И не все примеры уже рабочие.

John_Medved 02.06.2021 11:08

Добрый день. Спасибо, что откликнулся на зов.
Ну да, пусть оно на фронтэнд придёт в переменную допустим cryptedData от сервера, а дальше клиентская логика его закинет в textarea с id="y". Главное, чтобы основные функции шифрования и дешифрования выполнялись на сервере. Чтоб юзер не видел ключа.

Вот допустим есть index.html, который app.get('/', fuction(req, res) {
res.sendFile(__dirname + '/index.html');
});
Например такой:
<p style="text">Введите первое число</p>
<textarea> id="X" </textarea>
<p style="text">Введите второе число</p>
<textarea> id="y" </textarea>
<button id="summ" onclick="?????" > Сложить</button>

И функция на сервере:

function summData(x, y) {
x+y;
}

Вот и как заставить их взаимодействовать?

John_Medved 02.06.2021 11:12

Начал читать Пауэрса Изучаем Node переходим на сторону сервера. Вроде пока хорошо заходит. Надеюсь дойду до своего решения.
А до этого смотрел ютуб, stackoverflow, habr и прочий интернет. Не нашёл ответа. Может просто просмотрел по тупости)))

ksa 02.06.2021 12:32

Цитата:

Сообщение от John_Medved
Начал читать Пауэрса Изучаем Node переходим на сторону сервера.

Да, в этой книжке довольно простенько рассказывают про обработку http и создание API...

У тебя будет get запрос, который вернет закодированную строку.

ksa 02.06.2021 12:47

Цитата:

Сообщение от John_Medved
Вот и как заставить их взаимодействовать?

Вот пример простого сервера, который отвечает на POS-запросы...

var http = require('http');
var querystring = require('querystring');

var server = http.createServer().listen(3000);

server.on('request', function(request,response) {
	if (request.method == 'POST') {
		var body = '';
		// Фрагмент данных присоединяется к body
		request.on('data', function (data) {
			body += data;
		});
		// Переданные данные
		request.on('end', function () {
			var post = querystring.parse(body);
			// В post будет твоя строка, которую ты передал серверу
			console.log(post);
			response.writeHead(200, {'Content-Type': 'text/plain'});
			// Вот тут тебе нужно вернуть закодированную строку
			response.end('Hello World\n');
		});
	}
});
console.log('Сервер прослушивает порт 3000');

John_Medved 02.06.2021 14:45

Спасибо, Бро!
Попробую так.

ksa 02.06.2021 15:21

Вот вариант для ГЕТ и ПОСТ...

var http = require('http');
var querystring = require('querystring');

var server = http.createServer().listen(3000);

server.on('request', function(request,response) {
	console.log(request.url)
	//console.log(Object.keys(request))
	if (request.method == 'POST') {
		var body = '';
		// Фрагмент данных присоединяется к body
		request.on('data', function (data) {
			body += data;
		});
		// Переданные данные
		request.on('end', function () {
			var post = querystring.parse(body);
			// В post будет твоя строка, которую ты передал серверу
			console.log(post);
			response.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
			// Вот тут тебе нужно вернуть закодированную строку
			response.end('POST запрос');
		});
	}
	if (request.method == 'GET') {
		response.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
		response.end('GET запрос');
	}
});
console.log('Сервер прослушивает порт 3000');

Vlasenko Fedor 02.06.2021 16:34

не очень хорошая идея в теперешнем часе писать ручками сервера
понимать как работает надо
но лучше взять хорошее готовое
к примеру https://www.fastify.io/
один из лучших быстрых серверов js на текущий момент
с большим количеством расширением

ksa 02.06.2021 17:02

Цитата:

Сообщение от Vlasenko Fedor
понимать как работает надо

Для этого и нужно писать руками... :D

John_Medved 02.06.2021 18:28

Благодарствую????????

ksa 02.06.2021 18:49

John_Medved, если нужно заиметь простенький сервер на "базе" Electron (а его ранее хорошо пиарили).
https://www.npmjs.com/package/electron
Достаточно его установить глобально
npm i electron -g


Тогда можно сразу скомпилировать простой сервер
electron <имя_папки>

В текущем каталоге будет создано приложение Node.js с двумя страницами, шаблонизатором и отработкой ошибок 404 и 500.

Vlasenko Fedor 02.06.2021 21:14

ksa,
Electron это немного другое
Это фреймворк для написания кросплатформенных десктопных приложений
На базе браузерного движка Chromium
в двух словах это фронт и сервер между которыми может обмен данными с помощью обычных запросов http так и с помощью EventEmitter (ipcRenderer)
Здесь (вместе с Electron, Vue) мне нравится Quasar со своими плюшками

ksa 02.06.2021 22:34

Vlasenko Fedor, я все к тому, что на свете валом всего и для всего.
За всем не угонишься.

Если сам можешь многое написать руками - это всегда пригодится в жизни.
А научиться пользоваться чем-то чужим и более "навороченным", потом всегда можно. Тем паче все это ПО разрабатывают в избытке.

Vlasenko Fedor 02.06.2021 23:02

Да пригодиться. Личный опыт и собственные шишки, алгоритмы и паттерны, умение создать архитектуру и выбрать решение это есть цена разработчика.
Сейчас приходят многие и даже не заглядывают в исходный код того, что используют. Считают себя программистами с знанием 1-2 фреймворка. Так как потребность на рынке большая и им удается пристроится. Приходят люди разных специальностей, когда задаешь вопрос почему в программисты часто ответ платят хорошо. И очень мало тех кому это действительно нравится и у кого это было хобби.


Часовой пояс GMT +3, время: 05:01.