Zachycování závažných chyb pomocí Node.js child_process

Jsem relativně nový v hardcore hackování Node.js, takže vidím všechny druhy krásných nových chyb, které nemám ponětí, jak je vyřešit, když je poprvé vidím. Až do této chvíle jsem si dokázal udržet úsměv na tváři, když jsem se snažil tyto chyby opravit, což je vlastnost, která mě na sobě docela baví. Jedna z nedávných chyb, na kterou jsem narazil, byla chyba child_process , přičemž by došlo k chybě v rámci execSync příkaz a celá aplikace by se zhroutila; ani try/catch zachránil by mě. Našel jsem však řešení.

JavaScript

Nejlepší způsob, jak zachytit chyby, aniž byste museli nechat aplikaci blokovat, je použít proces spawn (nebo v tomto případě spawnSync ) metoda:

var childProcess = require('child_process');

var commitMessage = (function() {
	var spawn = childProcess.spawnSync('git', ['log', '--format=%B', '-n', '1']);
	var errorText = spawn.stderr.toString().trim();

	if (errorText) {
	  console.log('Fatal error from `git log`.  You must have one commit before deploying.');
	  throw new Error(errorText);
	}
	else {
	  return spawn.stdout.toString().trim();
	}
})();

Pomocí této metody můžete zkontrolovat stderr vyrovnávací paměť nejprve; pokud z něj je řetězec, víte, že došlo k chybě, pokud žádný text chyby, proces byl čistý!