NODE.js无法使用restler获取的restful数据

时间:2015-03-18 10:25:34

标签: javascript json node.js rest restler

我正在使用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分解为更有用(和过滤)的信息

1 个答案:

答案 0 :(得分:1)

console.log

时会发生什么
result

根据错误,您的对象结果没有名为

的属性
GetStationBoardResult

编辑:因为结果是一个字符串而不是一个对象,它将使用:

解决
var National = JSON.parse(result).GetStationBoardResult.locationName;