2017-02-07 2 views
1

의 모듈에서 데이터를 반환 할 수 없습니다 :/나는 하나 개의 파일에 코드 아래에 쓴 표현 노드 JS

모델은

module.exports = { 
     processedList: function(store_name) { 
      var t; 
      var tradeIds = exported.find({storename: store_name}, function (err, value) { 
       if (err) return console.error(err); 
      return value; 

      }).select('tid -_id'); 

     }, // Export connection here 
    }; 

내가 경로에있는 다른 파일이 exported.js

경로/내 보낸 .js

var exported = require('../models/exported.js'); 
var tradeIds = exported.processedList(storename); 
    console.log('simer'+tradeIds); 
} 

하지만 console.log에서 정의되지 않습니다. 처리 목록의 return 문 대신 console.log를 작성하면 결과가 콘솔이됩니다. 하지만 내 요구 사항은 모델 파일에서 경로 파일로 데이터를 반환하는 것입니다.

나는 표현하고 노드 j를 새로 도입했습니다.

가이던스는 매우 높이 평가됩니다.

답변

1

질문에 따라, 당신은 route에서 함수를 호출하고 함수의 경로를 반환하는 응답을 얻고 싶습니다. 간단한 콜백 함수를 사용합니다.

module.exports = { 
    processedList: function (store_name, callback) { 
     var t; 
     var tradeIds = exported.find({storename: store_name}, function (err, value) { 
      if (err) { 
       callback("error", err) 
      } else { 
       callback("success", value) 
      } 
     }).select('tid -_id'); 
    } 
} 

루트 models/exported.js

/그것이 작동

var exported = require('../models/exported.js'); 
exported.processedList('storename', function (err, results) { 
    if (err == 'error') { 
     console.log(err); 
    } else { 
     console.log(results); 
    } 
}); 
+0

Simer 난 그냥 내 코드가 당신을 위해 작동 희망 업데이 트되었습니다. 마지막으로 신텍스 오류가있을 수 있습니다. 아직도 어떤 문제라도 알려주지. –

+0

두 가지 솔루션이 모두 작동하고 있습니다. 당신과 kawadhiya21하지만, 일부 기능에 routes/exported.js 코드를 넣은 다음 그 funtion을 호출하려면 해당 코드를 다시 호출해야합니다. 우리가 전화를 걸 때마다 콜백을 사용해야하는 또 다른 기능. – Simer

1

비동기 환경에서 동기화 작업을 시도하고 있습니다. 콘솔 tradeIds 콘솔을 시도 할 때 processedList 또는 완료되지 않을 수 있습니다. NodeJS는 본질적으로 비동기이기 때문에 완료 될 때까지 기다리지 않습니다 (디자인 상으로는 버그가 아닙니다). 이런 식으로 실행하는 것이 아니라 콜백을 전달할 수 있습니다.

모델//

module.exports = { 
     processedList: function(store_name, cb) { 
      var t; 
      var tradeIds = exported.find({storename: store_name}, function (err, value) { 
       if (err) return cb(err); 
      cb(null, value); 
     }).select('tid -_id'); 

    }, // Export connection here 
}; 

경로를 exported.js이 console.log는 경우에만 processedList 완료 실행 일이 있는지 확인합니다

var exported = require('../models/exported.js'); 
exported.processedList(storename, function(err, results) { 
    if (err) { console.log(err); } 
    console.log(results); 
}); 

exported.js.

+0

exported.js. 그러나 어떤 함수에 routes/exported.js 코드를 삽입하면 무엇을 호출 할 것인가에 대한 호출을해야합니다. 다른 함수를 호출 할 때마다 콜백을 사용해야합니다. – Simer

+1

네, 그렇게 작동합니다. 자바 스크립트는 모두 비동기식입니다. 콜백은 작업을 채널 화하는 방법 중 하나입니다. – kawadhiya21

관련 문제