2014-10-18 3 views
0

나는 블룸버그 공개 API로 세션을 열어두고, 내 서비스의 API에서 호출을 중계하여 데이터를 가져 오는 중이다. 현재 Node.JS/Express 서버를 로컬에서 실행 중입니다. 처음에는 제대로 작동하는 API 경로가 있습니다. GET을 보내고 신속하게 응답을 되 찾을 수 있습니다. 그런 다음 다른 경로 GET을 동일한 경로로 보내면 블룸버그 API가 내 서버 콘솔에 반환하는 데이터를 볼 수 있지만 서버가 res.send(...)에 머물러있어 왜 아이디어가없는 것 같습니다. 코드 블록을 움직이고 강제로 변수를 파기하는 등 많은 일을 시도했지만 아무 소용이 없습니다. 너희들은 일할 분명한 것을 볼 수 있니?왜 내 첫 번째 API 호출이 제대로 실행되지만 두 번째 API 호출이 무기한 정지됩니까?

'use strict'; 

var _ = require('lodash'); 
var Blpapi = require('./blpapi.model'); 
var count = 0; 

var blpapi = require('blpapi'); 

// Add 'authenticationOptions' key to session options if necessary. 
var session = new blpapi.Session({ serverHost: '10.8.8.1', serverPort: 8194 }); 
var service_refdata = 1; // Unique identifier for refdata service 

session.start(); 
session.on('SessionStarted', function(m) { 
    console.log(m); 
    session.openService('//blp/refdata', service_refdata); 
}); 
session.on('ServiceOpened', function(m) { 
    console.log(m); 
}); 
session.on('SessionStartupFailure', function(m) { 
    console.log('SessionStartupFailure', util.inspect(m)); 
    session.stop(); 
    session.destroy(); 
}); 
session.on('SessionTerminated', function(m) { 
    console.log('Session Terminated'); 
    session.stop(); 
    session.destroy(); 
}); 

exports.getStock = function (req, res) { 
    var stock = req.url.substring(8, req.url.length); 
    stock = stock.replace(/_/g, ' '); 

    session.on('HistoricalDataResponse', function(m) { 
     console.log(m); 
     if(m.eventType === 'RESPONSE' && m.correlations[0].value === 101) { 
      console.log('send'); 
      res.send(m.data.securityData); 
     } 
     else { 
      res.send(500); 
     } 
    }); 

    newRequest(stock); 
}; 

function newRequest(sec) { 
    if(typeof sec !== 'string') return; 
    session.request('//blp/refdata', 'HistoricalDataRequest', 
     { securities: [sec], 
      fields: ['PX_LAST', 'OPEN'], 
      startDate: "20140101", 
      endDate: "20140301", 
      periodicitySelection: "DAILY" }, 101); 
} 

function handleError(res, err) { 
    return res.send(500, err); 
} 

EDIT1 : 나는 변경하는 경우 res.send(m.data.securityData);res.send(201);에, 요청이 잘 돌아와, 그래서 그것을 그 목적과 관련이있다 파악하고있다.

답변

0

나는 그것을 알아 냈다. 그것은 내 루트 컨트롤러 안에 session.on('HistoricalDataResponse', .... 문을 선언했기 때문입니다. 그것을 밖으로 이동하고 주위에 약간의 논리를 추가하면 문제가 해결되었습니다.