从 REST API 获取数据到 jsreports
Get data from REST API to jsreports
我可以从以下脚本中成功获取数据并显示在报告中。
function beforeRender(done){
require("request")({url:"http://nicolas.kruchten.com/pivottable/examples/mps.json",json:true},function(err, response, body){
request.data = {posts:body};
done();
})
}
我用过这个,
<h1>Request</h1>
<table style='border-style:solid'>
<tr>
<th>Province</th>
<th>Party</th>
<th>Name</th>
</tr>
{{for posts}}
<tr>
<td>{{:Province}}</td>
<td>{{:Party}}</td>
<td>{{:Name}}</td>
</tr>
{{/for}}
</table>
但是当我使用以下查询调用 REST api 时,它会获取数据并写入控制台,但不会显示在报告中。
var request = require('request');
function beforeRender(done){
require('request')({headers: {
'sToken': 'qq',
'log': 'dd'
}, url: 'http://localhost:3000/com.dd.com/Inventory' , json:true },
function(error, response, body) {
request.data = {posts:body};
console.log(request.data );
done();
});
}
HTML代码
<h1>Request</h1>
<table style='border-style:solid'>
<tr>
<th>Name</th>
</tr>
{{for posts}}
<tr>
<td>{{:Name}}</td>
</tr>
{{/for}}
</table>
JSON 返回的字符串:
{ posts:
{ Id: '700',
Name: 'myName',
__osHeaders:
{ Version: '{EFF95F4C-2FA2-11E5-BA94-040150C75001}',
Namespace: 'com.dd.com',
Class: 'Inventory',
Tenant: '123',
LastUdated: '2015-07-21 08:20:56.197248204 -0400 EDT' } } }
使用的引擎:jsrender
食谱:phantom-pdf
如何在报表中显示值?我在使用 API 时哪里出错了?
首先提到API returns一个数组,然后与jsrender一起工作for
循环。
但是根据您发布的 JSON 字符串,第二个 API returns 是一个对象,这就是 for
循环在那里不起作用的原因。它可以在没有 for 循环的情况下工作:<h1>{{:posts.Name}}</h1>
所以解决方案是更改 API 调用以实际接收一个数组或将输出转换为它以便您可以循环。
我发现了问题。我注释掉了以下行,导致我无法在报告中打印它。
var request = require('request');
因此新代码是,
//var request = require('request');
function beforeRender(done){
require('request')({headers: {
'sToken': 'qq',
'log': 'dd'
}, url: 'http://localhost:3000/com.dd.com/Inventory' , json:true },
function(error, response, body) {
request.data = {posts:body};
console.log(request.data );
done();
});
}
我可以从以下脚本中成功获取数据并显示在报告中。
function beforeRender(done){
require("request")({url:"http://nicolas.kruchten.com/pivottable/examples/mps.json",json:true},function(err, response, body){
request.data = {posts:body};
done();
})
}
我用过这个,
<h1>Request</h1>
<table style='border-style:solid'>
<tr>
<th>Province</th>
<th>Party</th>
<th>Name</th>
</tr>
{{for posts}}
<tr>
<td>{{:Province}}</td>
<td>{{:Party}}</td>
<td>{{:Name}}</td>
</tr>
{{/for}}
</table>
但是当我使用以下查询调用 REST api 时,它会获取数据并写入控制台,但不会显示在报告中。
var request = require('request');
function beforeRender(done){
require('request')({headers: {
'sToken': 'qq',
'log': 'dd'
}, url: 'http://localhost:3000/com.dd.com/Inventory' , json:true },
function(error, response, body) {
request.data = {posts:body};
console.log(request.data );
done();
});
}
HTML代码
<h1>Request</h1>
<table style='border-style:solid'>
<tr>
<th>Name</th>
</tr>
{{for posts}}
<tr>
<td>{{:Name}}</td>
</tr>
{{/for}}
</table>
JSON 返回的字符串:
{ posts:
{ Id: '700',
Name: 'myName',
__osHeaders:
{ Version: '{EFF95F4C-2FA2-11E5-BA94-040150C75001}',
Namespace: 'com.dd.com',
Class: 'Inventory',
Tenant: '123',
LastUdated: '2015-07-21 08:20:56.197248204 -0400 EDT' } } }
使用的引擎:jsrender
食谱:phantom-pdf
如何在报表中显示值?我在使用 API 时哪里出错了?
首先提到API returns一个数组,然后与jsrender一起工作for
循环。
但是根据您发布的 JSON 字符串,第二个 API returns 是一个对象,这就是 for
循环在那里不起作用的原因。它可以在没有 for 循环的情况下工作:<h1>{{:posts.Name}}</h1>
所以解决方案是更改 API 调用以实际接收一个数组或将输出转换为它以便您可以循环。
我发现了问题。我注释掉了以下行,导致我无法在报告中打印它。
var request = require('request');
因此新代码是,
//var request = require('request');
function beforeRender(done){
require('request')({headers: {
'sToken': 'qq',
'log': 'dd'
}, url: 'http://localhost:3000/com.dd.com/Inventory' , json:true },
function(error, response, body) {
request.data = {posts:body};
console.log(request.data );
done();
});
}