2015-09-09 3 views
2

Я мог бы успешно получить данные из следующего сценария и показать в отчете.Получить данные из REST API в 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
Рецепт: фантомное PDF

Как я могу отобразить значения в отчет ? Где я ошибся при использовании API?

ответ

1

Я нашел проблему. Я прокомментировал следующую строку, которая заставила меня не печатать ее в отчете.

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(); 
     }); 
    } 
0

Первый упомянутый API возвращает массив, который затем работает с циклом jsrender for.

Но в соответствии с вашей опубликованной строкой JSON второй API возвращает один объект, поэтому цикл for там не работает. Он работал бы без цикла с: <h1>{{:posts.Name}}</h1>

Таким образом, решение состоит в том, чтобы изменить вызов API, чтобы фактически получить массив или преобразовать вывод в него, чтобы вы могли выполнить цикл.

+0

Я попробовал оба пути бот получил не удалось. Когда я удалил цикл 'for' для второго API и добавил, как вы сказали,

{{: posts.Name}}

' Он дал эту ошибку: «Ошибка произошла - ошибка во время отчета рендеринга: не удается прочитать свойство« имя »неопределенного Stack - Error: Невозможно прочитать свойство «Name» undefined в ChildProcess. (D: \ SW \ jsreport \ node_modules \ script-manager \ lib \ manager-processes.js: 38: 23) в ChildProcess.emit (events.js: 110: 17) в handleMessage (child_process.js: 324 : 10) at Pipe.channel.onread (child_process.js: 352: 11) От предыдущего события: на Reporter.render' –

+0

Я попытался воспроизвести его на игровой площадке https://playground.jsreport.net/# игровая площадка/Zys1MkH0rl/3 и, похоже, работает, как я уже сказал, вы можете проверить это? –

+0

Странно. Он работает для меня в моей среде, когда я добавляю данные так же, как в сценарии. Но когда я меняю ТОЛЬКО скрипт на мой сценарий вызова REST, он дает ошибку. –

Смежные вопросы