我正在尝试使用Bloomberg Public API保持会话打开,将来自我自己服务的API的调用转发给它以获取数据。我现在正在本地运行Node.JS / Express服务器。我有一个API路由,第一次正常工作:我发送GET
,并快速得到回复。如果我然后将另一个GET
发送到同一路由,我可以看到Bloomberg API在我的服务器控制台中返回的数据,但似乎服务器卡在res.send(...)
而我没有想法为什么。我尝试了很多东西,比如移动代码块并强行销毁变量,但无济于事。你们看到任何明显可能/可能有效的东西吗?
'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 :(得分:0)
我明白了。这是因为我在路由控制器中声明了session.on('HistoricalDataResponse', ....
语句。将它移出并在其周围添加一些逻辑解决了这个问题。