В этом разделе давайте узнаем о методах Nodejs для реализации неблокирующих операций.
Давайте сначала изменить обработчик старта:
Кода -копия выглядит следующим образом:
var exec = require ("child_process"). Exec;
функция start () {
console.log ("запрос обработчика" был вызван.
var content = "пусто";
exec ("ls -lah", функция (ошибка, stdout, stderr) {
Content = stdout;
});
вернуть контент;
}
function upload () {
console.log («обработчик запроса» был вызван загрузкой '. »);
вернуть "Привет, загрузка";
}
exports.start = start;
exports.upload = upload;
Этот код создает новое содержимое переменной (начальное значение «пусто»), выполняет команду «ls -lah», назначает результат контенту и, наконец, возвращает контент.
Мы представили новый модуль Node.js, child_process, который используется для реализации простой и практической неблокирующей операции: exec ().
Так что же делает exec ()?
Он выполняет команду оболочки из node.js. В приведенном выше примере мы используем его для получения всех файлов в текущем каталоге («ls -lah»), а затем выводим информацию о файле в браузер, когда /starturl запросы.
Мы запускаем сервер и посещаем «http: // localhost: 8888/start», и мы обнаружим, что вывод содержимого на странице пуст.
exec () работает, и вместе с ним мы можем выполнять очень трудоемкие операции оболочки, не заставляя наше приложение остановиться и дождаться этой операции.
Несмотря на это, вывод содержимого страницы, кажется, не является результатом, который мы хотим.
Давайте проанализируем причины:
Наш код выполняется синхронно, что означает, что после вызова exec () node.js немедленно выполнит возвратный контент;
В настоящее время содержимое все еще «пустое», потому что функция обратного вызова, передаваемую в exec (), еще не выполнена - потому что операция exec () является асинхронной.
В следующем разделе мы объясним, как решить эту проблему.