2016-09-15 3 views
-1

데이터 배열에서 함수를 수행하는 모듈을 모욕했습니다. 함수를 실행할 때 내 서버에서 결과를 얻지 만 변수가 내 변수에 저장되지 않은 것처럼 보입니다. 결과는 정의되지 않습니다. 누군가 내 배열을 내 서버에서 볼 수있을 때 그 배열이 왜 정의되지 않았는 지 말해 줄 수 있습니까? 코드에 어떤 문제가 있는지 먼저변수가 변수에 정의되지 않은 배열 표시

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 가지 기능이 있습니다 , addEmplookId. 모두 호출되고 아무 것도 전달되지 않으므로 results var은 항상 정의되지 않습니다.
  • 또 다른 var results을 정의하는 모든 함수 내에 있으므로 results 매개 변수는 덮어 쓰지 않고 아무 것도 수행되지 않습니다.
  • lookId var Name은 정의되지 않습니다.
  • 어떤 종류의 "테스트"/ 학습 연습이기 때문에 William Smith, 4 또는 Smith과 같은 하드 코드 된 매개 변수 (command)가 있다고 가정합니다. 콜백 함수 내에서 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 

더 많거나 적은 당신이 할 것, 내가 좋아하는 뭔가를 (I 변경, 조심해야 할 것이 무엇 약간의 코딩 유형과 경계/입력은 제어되지 않습니다) :

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';와 같은 변수를 재정의했습니다. 이것은 resume = foo.lookupByLastName ('Smith')와 같이 res를 저장하려고 할 때이 결과를 보여줍니다. 그것도 여전히 반환 됨 undefined –

+0

내가 정의한'res' 변수가 정의되지 않은 경우'foo.addEmployee' 함수에서 정의되지 않은 (또는 아무 것도) 반환하지 않기 때문입니다. – user3819881

관련 문제