0
我需要在節點中運行不安全的JS腳本,並能夠從錯誤中恢復。 腳本可以使用異步函數,所以我使用contextify而不是VM模塊中內置的節點。 問題是腳本中的異步代碼中的錯誤會使節點進程崩潰。Contextify:如何捕捉異步錯誤
這裏是我的測試:
var contextify = require('contextify');
var context = {
console:{
log:function(msg){
console.log('Contextify : '+msg);
}
},
setTimeout:setTimeout
};
console.log("begin test");
contextify(context);
try{ // try to run unsafe script
//context.run("console.log('Sync user script error');nonExistingFunction();"); // works
context.run("setTimeout(function(){ console.log('Async user script error');nonExistingFunction(); },2000);"); // crash node process
}catch(err){
console.log("Recover sync user script error");
}
console.log("end test");
我如何能趕上異步錯誤?
//main.js
var child_process = require('child_process');
var script = child_process.fork("scriptrunner.js");
script.on('error',function(err){
console.log("Thread module error " + JSON.stringify(err));
});
script.on('exit',function(code,signal){
if(code==null)
console.log("Script crashed");
else console.log("Script exited normally");
});
script.send("setTimeout(function(){ console.log('Async user script error');nonExistingFunction(); },2000);");
//scriptrunner.js
var contextify = require('contextify');
var context = {
console:{
log:function(msg){
console.log('Contextify : '+msg);
}
},
setTimeout:setTimeout
};
contextify(context);
process.on('message', function(js) {
try{
context.run(js);
}catch(err){
console.log("Catch sync user script error " + err);
}
});
:
我還在使用contextiy來運行腳本。我有相反的問題。如何知道symxtify實例內的異步函數何時成功完成並可將結果返回給父進程?提前致謝! – LPG 2016-05-13 22:14:57