Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 13.02.2019, 12:52
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Маэстро
Как оперируя только одной вебстраницей сделать reload сервера?
самый обычный POST запрос.
Ответить с цитированием
  #12 (permalink)  
Старый 13.02.2019, 12:57
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от j0hnik Посмотреть сообщение
самый обычный POST запрос.
Это безусловно POST-запрос. А дальше? Кто должен принять этот запрос и перезапустить myserver.js под Нодой? Если можно, то прошу код в пару строк...
Ответить с цитированием
  #13 (permalink)  
Старый 13.02.2019, 13:57
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Надо у старика Мюнхаузена спросить, он что-то подобное проделывал.
Ответить с цитированием
  #14 (permalink)  
Старый 20.02.2019, 15:42
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сам себя за волосы не вытащишь. Тут помощники нужны. В помощники я взял nodemon и Apache/PHP, которые уже стоят на сервере.
Решение задачи:
Создаем HTML-форму, которая POST-запросом отправляет на сервер содержимое input-поля с именем "s". Форма вызывает PHP-скрипт startstop.php
Данный скрипт принимает числовой параметр s и сохраняет его в файл startstop.js в тот же каталог, где лежит server.js
Nodemon, как известно, засекает изменение файла startstop.js в каталоге и перегружает server.js

упрощенный код startstop.php:
<?
if (!isset($_POST['s'])) exit;
$s = trim(substr($_POST['s'],0,10));
settype($s,"integer");
file_put_contents('путь_к_каталогу_сервера/startstop.js', $s);
echo $s."\n";
?>

начало кода в server.js
var command = fs.readFileSync('startstop.js');
if (command == 1)
 {
 var s = 'server stopped ' + "\n"; 
 fs.appendFileSync('имя_лог_файла',s);
 return; // завершение работы сервера
 }
else
 {
 // действия при старте server.js
 var absd = command;
 };

Примечания:
1. в HTML-форме есть еще поле password, которое опущено в данном примере
2. файл startstop.js сначала хотел назвать startstop.txt, но nodemon на него не реагирует, несмотря на то, что в настройках значится watching:*.* (пока не понял почему)
3. для автора этого поста: HTML-форму можно сделать на PHP, добавить в неё чтение файла server.js и отправку в браузер в поле TEXTAREA. Соответственно, после внесения изменений, отправить POST-запросом на сервер, где скрипт startstop.php сначала сохранит новый файл server.js, что перезапустит Node.js-сервер с новым кодом.
Ответить с цитированием
  #15 (permalink)  
Старый 23.02.2019, 05:44
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Apache зачем? nodejs прекрасно принимает пост запросы и работает с файлами.
Ответить с цитированием
  #16 (permalink)  
Старый 24.02.2019, 00:26
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от j0hnik Посмотреть сообщение
Apache зачем? nodejs прекрасно принимает пост запросы и работает с файлами.
затем, что если node-myserver.js погасить (остановить) или он вывалится по ошибке, то уже никто никакой post-запрос не примет и никакой файл не запишет.
Ответить с цитированием
  #17 (permalink)  
Старый 24.02.2019, 02:07
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Маэстро
затем, что если node-myserver.js погасить (остановить) или он вывалится по ошибке, то уже никто никакой post-запрос не примет и никакой файл не запишет.
Вам же просто перезагружать надо, nodemon я так понимаю для этого и поставили.
Ответить с цитированием
  #18 (permalink)  
Старый 24.02.2019, 02:22
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от j0hnik Посмотреть сообщение
Вам же просто перезагружать надо, nodemon я так понимаю для этого и поставили.
Не только перезагружать. Сервер надо запускать, останавливать и перезапускать с разными (переданными) параметрами. И еще раз повотряю: если сервер вывалится с ошибкой, то как его перезапускать, имея в руках только смартфон и в нем браузер?
Ответить с цитированием
  #19 (permalink)  
Старый 24.02.2019, 11:40
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Хех. Ну вот я напейсал такой модуль под названием childProcessExecFile.js
var execFile = require('child_process').execFile;

function childProcessExecFile(p, ...args) {
	return new Promise(function(resolve, reject) {
		execFile(p, args, function(err) {
			if(err) resolve(err);
			resolve('OK');
		});
	});
}

module.exports = childProcessExecFile;

Потом напейсал такой модуль
var childProcessExecFile = require('./childProcessExecFile');

childProcessExecFile('node', 'absolute_path_to_serv/server.js')
	.then( ok => {
		console.log(ok);
	})
	.catch( err => {
		console.log(err);
	});

И запустил приложение.
Видимо, это может значить, что на том же VPS можно параллельно запустить ещё один сайтик и через него запускать/останавливать соседний.

Последний раз редактировалось Audaxviator, 24.02.2019 в 11:43.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
узнать Ip адрес клиента polin11 Node.JS 0 05.11.2016 14:13
Чтение файла на стороне клиента annie88 Javascript под браузер 18 13.01.2016 10:44
Как проверить сайт клиента на установленный блок Alexmad Серверные языки и технологии 10 02.04.2015 20:03
web управление на основе javascript MaksLuk Элементы интерфейса 31 29.03.2015 21:27
Как оборвать на сервере и клиенте запрос если у клиента пропала сеть. beard AJAX и COMET 3 21.12.2012 16:35