2015-02-12 69 views
0

我正在使用'child_process'(fork方法)來處理跨服務器保存一些記錄的任務。爲此,我在子進程中使用jquery ajax調用來保存記錄。但不知何故,該代碼不會被執行。 我已經在html中包含了jquery.min.js文件,其中包括文件fork子進程。在子進程中製作jquery ajax調用 - node.js

文件分叉子進程:

var childProcess = require('child_process'); 
var syncProcess; 

function launchMindwaveDataSync(){ 
//alert("launchMindwaveDataSync fired"); 
var iconSync = document.getElementById("iconSync"); 
iconSync.src = "images/findDevice.gif"; 
iconDevice.title = "Synchronizing..."; 

//Launch the device reader script in a new V8 process. 
syncProcess = childProcess.fork('./js/mindwaveDataSync.js'); 

syncProcess.on('message', function(message){ 
    console.log(message); 

    switch(message.msg) 
    { 
     case "connected": 
      global.HEADSET_CONNECTED = true; 
      iconDevice.src = "images/icon-power.png"; 
      iconDevice.title = "Connected to Mindwave Mobile device"; 
      startSynchronizing(); 
     break; 

     case "disconnected": 
     case "error": 
     case "close": 
     case "timeout": 
      global.HEADSET_CONNECTED = false; 
      iconDevice.src = "images/error.png"; 
      iconDevice.title = "Mindwave Mobile device is disconnected"; 
     break; 
    } 
}); 

syncProcess.on('error', function(e){ 
    console.log(e); 
}); 

setTimeout(function(){ 
    console.log('sending command initialize'); 
    syncProcess.send({cmd:'initialize'}); 
    },1000); 
}; 

function startSynchronizing(){ 
    syncProcess.send({cmd: 'synchronize'}); 
} 

這是爲了讓孩子過程AJAX調用

var recursive = require('recursive-readdir'); 
var SecurConf = require('../js/secureConf'); 
var sconf = new SecurConf(); 
var filesToSync = []; 
var crypto = require('crypto'); 
var options = { 
    //prompt : 'File Password : ', 
    algo : 'aes-128-ecb', 
    file : { 
     encoding : 'utf8', 
     out_text : 'hex' 
    } 
}; 

process.on('message', function (command){ 
    console.log(command); 

    switch(command.cmd) 
    { 
     case "initialize": initializeConnection(); 
     break; 

     case "synchronize": checkForFiles(); 
     break; 

     case "record": 
     client.resume(); 
     break; 

     case "pause": 
      client.pause(); 
      break; 

     case "stop": 
      client.destroy(); 
      break; 
    } 

    //process.send({msg:"Sync Process: " + command.cmd}); 
    }); 



function checkForFiles(){ 

recursive('C:/MindWaveData/Data/', function (err, files) { 
     // Files is an array of filename 
     filesToSync = files; 
     decryptFiles(); 
     //process.send({msg:files}); 
    }); 

} 

function decryptFiles(){ 
    var ajaxSuccess = function(res){ 
     process.send({msg:res}); 
    } 
    for(var i = 0; i < filesToSync.length; i++){ 
     var ef = ""+filesToSync[i]; 
     sconf.decryptFile(ef, function(err, file, content){ 
      if(err){ 
       process.send({msg:"some error occurred while decrypting..."}); 
      } else { 
       var parsedContent = JSON.parse(content); 

       var decryptedContent = JSON.stringify(parsedContent, null,'\t'); 
      for(var j = 0; j<parsedContent.length; j++){ 
       $.ajax({ 
       //async: false, 
       type: "POST", 
       url: "http://192.168.14.27:8001/admin/webservice", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       data: JSON.stringify({ 
        'ncFunction': 'login', 
        'ncParams': { 
         'ncUserEmail': "[email protected]", 
         'ncUserPassword': "[email protected]#" 
        } 
       }), 
       success: function (res) { 
        ajaxSuccess(res); 
       }, 
       error: function (xhr, type, err) { 
        ajaxSuccess(res); 
       } 
      }); 

     } 
    }); 
    } 
} 


function initializeConnection(){ 
    //console.log('initializeConnection::function'); 
    //process.send({msg:"initializeConnection called"}); 
    checkConnection() 

    //process.send({msg:"connected"}); 
    //call function to send ajax request 
} 

function checkConnection(){ 

//console.log('checkConnection::function'); 
//call ajax request 3 times to check the connection.. once in third try we  get the response OK, we can send the process message as connected 
var ajaxCallCount = 0; 
var makeAjaxCall = function(){ 
     //console.log('function makeAjaxCall'); 
     //process.send({msg:"connected"}); 
     if(ajaxCallCount < 2){ 
      ajaxCallCount++; 
      //console.log('ajaxCallCount:'+ajaxCallCount); 
      //process.send({msg:'value of ajaxCallCount:'+ajaxCallCount}); 
      connectionSuccess(); 
     } 
     else{ 
      process.send({msg:"connected"}); 
     } 

    }; 

var connectionSuccess = function(){ 
     //console.log('function connectionSuccess'); 
     makeAjaxCall(); 
    }; 

    makeAjaxCall(); 
    } 

我們可以使用jQuery AJAX調用像這樣子進程?另外,我將文件分叉子進程包含在一個html文件中,並且正在載入其正文,我正在調用/ launchMindwaveDataSync /從下面顯示的第一個文件開始。

在此先感謝

+0

jQuey ajax調用'child_process' !!!你能否詳細說明一下併發布一些代碼 – 2015-02-12 08:22:05

+0

我現在已經發布了很少的代碼。 – 2015-02-12 09:31:00

回答

0

我們可以用「請求」模塊,而不是AJAX調用這個樣子。我找到了答案here