在子进程中进行jquery ajax调用 - node.js

时间:2015-02-12 08:19:21

标签: node.js child-process

我正在使用'child_process'(fork方法)来处理跨服务器保存一些记录的任务。为此,我在子进程中使用jquery ajax调用来保存记录。但不知何故,代码没有被执行。 我已经在html中包含了jquery.min.js文件,其中我也包含了文件forking子进程。

文件分叉子进程:

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': "clarity_admin@yopmail.com",
                        'ncUserPassword': "cl123!@#"
                    }
                }),
                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 /来自下面显示的第一个文件。

提前致谢

1 个答案:

答案 0 :(得分:0)

我们可以使用&#39; request&#39;模块而不是像这样的ajax调用。我找到了答案here