2013-05-04 32 views
1

我使用快递框架和node.js中试图写一个RESTAPI我面临着一个我无法找出根本原因的错误。我收到以下错误试图执行代码:错误,而使用异步中的node.js

TypeError: Cannot read property 'node_type' of undefined其中“NODE_TYPE”是来自一个函数的值

var GdbProcess = require('../../dao/gdb/processnds') 
var mongo = require('mongodb'); 
var async = require('async'); 

exports.executeService = function(req,res){ 
//Make the process object to query 
var manualProcessQuery = new Object(); 
manualProcessQuery.index = req.params.processmap; 
manualProcessQuery.key = "pid"; 
manualProcessQuery.value = req.params.pid; 
manualProcessQuery.event = req.params.event; 

var tempDataNodeToExecute = new Object(); 
//This function returns an object (dataNodeToExecute) to execute 
GdbProcess.getParametersbyNode(manualProcessQuery,function(err,dataNodeToExecute){ 
    if(err) res.send(err); 
    tempDataNodeToExecute = dataNodeToExecute; 
    var isSystem = false; 
    if (tempDataNodeToExecute.node_type =="system"){ 
     isSystem = true; 
    } 

    var count = 0; 

    async.whilst(
     function() { return isSystem }, 
     function (callback) { 
      //execute the function 
      executeSystem(dataNodeToExecute,function(err,executionStatus){ 
       if (err) callback(err); 
       count++; 
       if(executionStatus=="completed"){ 
        manualProcessQuery.value = tempDataNodeToExecute.pid; 
        manualProcessQuery.event = "completed"; 
         GdbProcess.getParametersbyNode(manualProcessQuery,function(err,dataNodeToExecute2){ 
         if(err) callback(err); 
         tempDataNodeToExecute = dataNodeToExecute2; 
         if (tempDataNodeToExecute.node_type == "manual"){ 
          isSystem = false; 
         } 

        }); 

        callback(); 
       } 
      }); 
     }, 
     function (err) { 
      if(err) res.send(err); 
      res.send("success"); 
     } 
    ); 
}); 

} 



var executeManual = function(prosNodeToExecute,callback){ 
//do something 
callback (null); 
} 

var executeSystem = function(prosNodeToExecute,callback){ 
//do something 
callback(null,"completed"); 
} 

当我调试的代码,我清楚地看到,NODE_TYPE可用。有人能帮我找到根本问题吗?

回答

0

删除新对象tempDataNodeToExecute和使用,而不是它dataNodeToExecute,这是一个很好的做法,使程序不崩溃使用其财产之前检查对象的零。

+0

是..我试过dataNodeToExecute。但它的结果是一样的。我是故意不检查对象的空帮我找出到底崩溃 – codejammer 2013-05-04 17:52:52