2015-04-08 2 views
0

У меня есть следующий в моем сценарии:http.listen() принимают терминальные команды во время работы

var server = http.createServer(handleRequest); 
server.listen(3000, function(err){ 
    console.log(err || 'Server listening on 3000'); 
}); 

Когда я выполнить скрипт в терминале:

nodejs file.js 

Он работает в бесконечном цикле пока я не ударил Ctrl + C. Можно ли вводить пользовательские команды во время выполнения процесса, поскольку он не возвращается к терминалу по умолчанию? Я хотел бы добавить несколько пользовательских команд для моего приложения, такие как (но не ограничиваясь ими):

  • остановка
  • перезарядка
  • рестарт
+0

[Forever] (https://github.com/foreverjs/forever) делает это! – adeneo

+0

Я использовал ответ на http://stackoverflow.com/questions/696839/how-do-i-write-a-bash-script-to-restart-a-process-if-it-dies для решения этой проблемы , – itdoesntwork

+0

Я хотел бы, чтобы он вызывал функции внутри скрипта, хотя перезагрузка перезагружает файл конфигурации. –

ответ

3

Вы можете использовать process.stdin поток (data событие вызывается на новую строку):

var http = require('http'); 

var server = http.createServer(function (err, req, res) { 
    // ... 
}); 
server.listen(3000, function(err){ 
    console.log(err || 'Server listening on 3000'); 
}); 

var commands = { 
    stop: function() { 
    console.log('> stop'); 
    }, 
    start: function() { 
    console.log('> start') 
    }, 
    restart: function() { 
    console.log('> restart') 
    } 
} 

process.stdin.on('data', function (data) { 
    data = (data + '').trim().toLowerCase(); 
    if (data in commands) { 
    commands[data](); 
    } 
}); 

Просто для справки nodemon делает что-то подобное (он перезапускает сервер при вводе rssource)

+0

Похоже, он делает именно то, что я ищу! –

Смежные вопросы