Отправка API шаблона в JSReport из ReactJS

#javascript #node.js #reactjs #report #jsreport

Вопрос:

В Node.js клиент для jsreport отлично работает с node.js или ваниль, однако, при реализации его с помощью React я получаю различные библиотечные ошибки, которых нет, когда код выполняется непосредственно в узле. Как я могу использовать его с React?

 const client = require("jsreport-client")("http://localhost:5488/");

const data = {
  template: {
    shortid: "2_Kw0BRuOm",
    recipe: "html-to-xlsx",
    data: {
      people: [{ name: "Omar rafat", age: "20", job: "Software Engineer" }],
    },
  },
};

async function render() {
  const res = await client.render(data);
  const responseBuffer = await res.body();

  const fileURL = URL.createObjectURL(responseBuffer);
  window.open(fileURL);
}


class App extends React.Component {
  myfun = () => {
    render().catch(console.error);
  };

  render() {
    return (
      <div className="App">
        <button
          onClick={() => {
            this.myfun();
          }}
        >
          Click me
        </button>
      </div>
    );
  }
}

export default App;

 

Часть после ответа буфера должна быть

 await fs.writeFile("out.xlsx", responseBuffer);
 

однако вывод файла в файловую систему сервера-это не то, что я хочу в случае React, но из-за приведенной ниже ошибки я все еще не знаю точно, как обрабатывать загрузку ответа jsreport из браузера.

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

введите описание изображения здесь

и линия

 const res = await client.render(data);
 

похоже, это то, что вызывает его.

Ответ №1:

В jsreport есть другой клиент для приложений на основе браузера. https://jsreport.net/learn/browser-client

 npm install jsreport-browser-client-dist
 
 jsreport.renderAsync(request).then(function(res) {
  //open in new window
  window.open(res.toDataURI())

  //get the content as string
  res.toString()

  //open download dialog
  res.download('test.pdf') 
});