代码之家  ›  专栏  ›  技术社区  ›  Marlon Abeykoon

从REST API获取数据到jsreports

  •  4
  • Marlon Abeykoon  · 技术社区  · 9 年前

    我可以成功地从以下脚本中获取数据并显示在报告中。

    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>
    

    但当我使用以下查询调用RESTapi时,它会在控制台中获取数据和写入数据,但不会显示在报告中。

    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时哪里出了问题?

    2 回复  |  直到 9 年前
        1
  •  2
  •   Marlon Abeykoon    9 年前

    我发现了问题。我注释掉了下面的一行,导致我没有将其打印在报告上。

    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();
            });
        }
    
        2
  •  0
  •   Jan Blaha    9 年前

    第一个提到的API返回一个数组,然后使用jsrender for

    但根据您发布的JSON字符串,第二个API返回一个对象,这就是为什么 对于 循环在那个里不起作用。它可以在没有for循环的情况下使用: <h1>{{:posts.Name}}</h1>

    因此,解决方案是更改API调用以实际接收数组或将输出转换为数组,以便可以循环。