我正在使用NODE.JS的restler来从实时订阅源获取数据。如果我只想将整个Feed显示到屏幕上,它的工作效果非常好,但是我想实际抓住Feed并将其过滤掉,只发出所需的内容。
以下是我的API中的代码片段
app.get('/cis/public/:crs', function (req, res) {
fullpath = 'http://(domain)/timetables/search_crs.php?crs='+req.params.crs;
rest.get(fullpath).on('complete', function(result) {
if (result instanceof Error) {
console.log('Error:', result.message);
this.retry(1000); // try again after 1 sec
} else {
res.send(result);
}
});
});
这会在屏幕上显示完整的Feed,但不会按照我的预期进行格式化。
这是我想要做的一个例子,如果我使用本地JSON文件,这可以正常工作。例如,如果我输入类似
的内容var results = JSON.parse(fs.readFileSync('。/ data / ppm.json','utf8'));
但是,当使用以下格式的restful时,我会失败
app.get('/cis/public/:crs', function (req, res) {
fullpath = 'http://(domain)/timetables/search_crs.php?crs='+req.params.crs;
rest.get(fullpath).on('complete', function(result) {
if (result instanceof Error) {
console.log('Error:', result.message);
this.retry(1000); // try again after 1 sec
} else {
var National = result.GetStationBoardResult.locationName;
res.send(National);
}
});
});
引发的错误是
var National = result.GetStationBoardResult.locationName;
^
TypeError: Cannot read property 'locationName' of undefined
如何在节点内使用从restler获取的数据,而不仅仅是在屏幕上显示。
以下是返回的JSON
的示例(顶部){
"GetStationBoardResult": {
"generatedAt": "2015-03-18T10:49:36.9120348+00:00",
"locationName": "Swindon",
"crs": "SWI",
"platformAvailable": true,
"trainServices": {
由于
编辑:这是最后一段代码,现在为我提供了有用且可用的JSON。
app.get('/cis/public/:crs/:total', function (req, res) {
fullpath = 'http://(domain)/timetables/search_crs.php?crs='+req.params.crs+'&total='+req.params.total;
rest.get(fullpath).on('complete', function(result) {
if (result instanceof Error) {
console.log('Error:', result.message);
this.retry(1000); // try again after 1 sec
} else {
var Results = JSON.parse(result);
res.send(Results);
}
});
});
我现在可以用结果做额外的事情了。并将JSON分解为更有用(和过滤)的信息
答案 0 :(得分:1)
console.log
时会发生什么result
根据错误,您的对象结果没有名为
的属性GetStationBoardResult
编辑:因为结果是一个字符串而不是一个对象,它将使用:
解决var National = JSON.parse(result).GetStationBoardResult.locationName;