#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')
});