NODE.js 无法使用 restler 获得的 restful 数据
NODE.js unable to use restful data obtained by restler
我正在使用带有 NODE.JS 的 restler 从实时提要中获取数据。如果我只想在屏幕上显示整个提要,它会很好地工作,但是我想实际抓取提要并过滤它,只发布需要的内容。
这是我的 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);
}
});
});
这会在屏幕上显示完整的提要,但格式不符合我的预期。
这是我想做的事情的一个例子,如果我使用本地 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 分解为更有用(和过滤)的信息
当你 console.log
时会发生什么
result
根据错误,您的对象结果没有名为
的 属性
GetStationBoardResult
编辑:由于结果是一个字符串而不是一个对象,它将使用以下方法解决:
var National = JSON.parse(result).GetStationBoardResult.locationName;
我正在使用带有 NODE.JS 的 restler 从实时提要中获取数据。如果我只想在屏幕上显示整个提要,它会很好地工作,但是我想实际抓取提要并过滤它,只发布需要的内容。
这是我的 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);
}
});
});
这会在屏幕上显示完整的提要,但格式不符合我的预期。
这是我想做的事情的一个例子,如果我使用本地 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 分解为更有用(和过滤)的信息
当你 console.log
时会发生什么result
根据错误,您的对象结果没有名为
的 属性GetStationBoardResult
编辑:由于结果是一个字符串而不是一个对象,它将使用以下方法解决:
var National = JSON.parse(result).GetStationBoardResult.locationName;