Gereksinimler
Bu, Promises ve Async / Await desteğiyle birlikte Node.js 7 veya sonraki bir sürümünü gerektirir.
Çözüm
Sayfanın davranışını kontrol etmek için vaatlerden yararlanan bir sarmalayıcı işlevi oluşturun. child_process.exec
Komutun .
Açıklama
Sözler ve eşzamansız bir işlev kullanarak, bir geri arama cehennemine düşmeden ve oldukça düzgün bir API ile çıktıyı döndüren bir kabuğun davranışını taklit edebilirsiniz. await
Anahtar kelimeyi kullanarak, işinizi child_process.exec
halletmeye devam ederken, kolayca okuyan bir komut dosyası oluşturabilirsiniz .
Kod örneği
const childProcess = require("child_process");
/**
* @param {string} command A shell command to execute
* @return {Promise<string>} A promise that resolve to the output of the shell command, or an error
* @example const output = await execute("ls -alh");
*/
function execute(command) {
/**
* @param {Function} resolve A function that resolves the promise
* @param {Function} reject A function that fails the promise
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
*/
return new Promise(function(resolve, reject) {
/**
* @param {Error} error An error triggered during the execution of the childProcess.exec command
* @param {string|Buffer} standardOutput The result of the shell command execution
* @param {string|Buffer} standardError The error resulting of the shell command execution
* @see https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
*/
childProcess.exec(command, function(error, standardOutput, standardError) {
if (error) {
reject();
return;
}
if (standardError) {
reject(standardError);
return;
}
resolve(standardOutput);
});
});
}
Kullanım
async function main() {
try {
const passwdContent = await execute("cat /etc/passwd");
console.log(passwdContent);
} catch (error) {
console.error(error.toString());
}
try {
const shadowContent = await execute("cat /etc/shadow");
console.log(shadowContent);
} catch (error) {
console.error(error.toString());
}
}
main();
Örnek Çıktı
root:x:0:0::/root:/bin/bash
[output trimmed, bottom line it succeeded]
Error: Command failed: cat /etc/shadow
cat: /etc/shadow: Permission denied
Çevrimiçi deneyin.
Repl.it .
Dış kaynaklar
Sözler .
child_process.exec
.
Node.js destek tablosu .