2016-09-15 115 views
-1

我镶嵌了一个模块,该模块对数据数组执行功能。当我运行这个函数时,我在我的服务器上得到了结果,但它们似乎没有存储在我的变量中,而这个变量未定义。有人能告诉我为什么我的数组在我的服务器中可以看到数组时为何返回undefined?显示未定义变量的数组

var net = require('net'); 
var foo = require('./employeeModule'); 
var _ = require('underscore'); 
var colors = require('colors/safe'); 



var server = net.createServer(
    function(socket){ 
    console.log("Client connection..."); 

    socket.on('end', function(){ 
     console.log("Client disconnected..."); 
    }); 

// process data from client 
socket.on('data', function(data){ 
    var command = data.toString(); 
    var results={}; 
    console.log("Received Command: " +command); 
    if (command == "lookupByLastName Smith") 
     { 
     function lastName(results) 
     { 
      var results = foo.lookupByLastName('Smith'); 
      console.log('These are the results: '+ results) 
     } 
     lastName(); 
     } 

    else if (command == "addEmployee William Smith") 
     { 
     function addEmp(results) 
     { 
      var results = foo.addEmployee('William', 'Smith'); 
      console.log('These are the results: '+ results) 
     } 
     addEmp(); 
     } 

    else if (command == "lookupById 4") 
     { 
     function lookId(results) 
     { 
      var results = foo.lookupById(4); 
      console.log('These are the results: '+ Name) 
     } 
     lookId(); 
     } 

    else if (command == "bye") 
     client.end(); 

    else console.log(colors.green("**"+command+" Command not recognized!**"));  

    });  
}); 


//listent for client connections 
server.listen(1000, function(){ 
    console.log("Listening for client connections"); 
}); 
+0

你从这个调用得到什么类型的值。 foo.addEmployee('William','Smith'); – abdulbarik

+0

从调用foo.lookupByLastName('Smith')。我从数组中获取选定的元素。它看起来像这样[{id:1,firstName:'John',lastName:'Doe'}]。 foo.addEmployee('William','Smith')只是为从导入的模块获取的数据添加一个元素。 –

回答

0

首先,什么是你的代码错误:

  • var results={}:VaR的results不被使用。
  • 你有3个功能lastName,addEmplookId。所有被调用并且没有任何通过,因此results var总是未定义的。
  • 在你定义的另一个函数var results中,因此,results参数(如覆盖它)没有做任何事情。
  • in lookId the var Name它是未定义的。
  • 我想你有参数硬编码(command s,像William Smith,4Smith),因为它是某种类型的“测试”/学习练习。我不建议你在回调函数中定义3个函数(因为它们在每次被称为回调时都被定义)。

如果你想保留的结果做到这一点(以下您的编码类型):

function addEmp(){ 
    var res = foo.addEmployee('William', 'Smith'); 
    console.log("There asre the results: " + res); 
    return res; 
} 
results = addEmp(); // now you set the value to results 

继或多或少你会做什么,我会做这样的事情(注意,我改变一点点的编码和边界/输入类型不受控制):

function lastName(surname){ 
    return foo.lookupByLastName(surname); 
} 
function addEmp(name, surname){ 
    return foo.addEmployee(name, surname); 
} 
// ... 

function socketData(data){ 
    var args = data.toString().split(' '); // assuming space as splitter 
    var results; 
    var command = args[0]; 
    switch(command){ 
    case 'lookupByLastName': 
    results = lastName(args[1]); 
    break; 
    case 'addEmp': 
    results = addEmp(args[1], args[2]); 
    break; 
    default: 
    // ... 
    } 
    // do something with results 
} 

var server = net.createServer(function(socket){ 
    // ... 
    socket.on('data', socketData); 
    // ... 
}); 
+0

我用于第一个解决方案,但我的res变量仍然显示未定义。我重新定义了变量res ='This result';.这给我显示了这个结果,但是当我尝试将res存储为res = foo.lookupByLastName('Smith')时。它仍然返回undefined –

+0

如果我定义的'res'变量是未定义的,那仅仅是因为你从'foo.addEmployee'函数返回未定义(或者什么都没有)。 – user3819881