You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS调用JSReport的Sending template API出现库错误该如何解决

问题原因

jsreport-client 是仅支持 Node.js 服务端环境的 SDK,依赖 fs、http、crypto 等 Node.js 原生内置模块,React 运行的浏览器环境不存在这些模块,因此直接在前端引入调用必然会抛出依赖缺失的错误。

解决方案

不需要使用官方的 Node 版客户端,直接通过标准 HTTP 请求调用 jsreport 公开的 REST 渲染接口即可,jsreport 所有能力都支持通过 API 直接调用,完全适配浏览器环境。

完整实现代码

import React from 'react';

// 替换为你实际的jsreport服务地址
const JSREPORT_SERVICE_URL = 'http://localhost:5488';

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

class App extends React.Component {
  handleExport = async () => {
    try {
      const res = await fetch(`${JSREPORT_SERVICE_URL}/api/report`, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          // 如果jsreport开启了身份验证,打开下方注释替换为你的账号密码
          // 'Authorization': 'Basic ' + btoa('admin:你的密码')
        },
        body: JSON.stringify(reportParams)
      });

      if (!res.ok) throw new Error('报表生成请求失败');

      // 将响应转为浏览器可识别的blob对象
      const fileBlob = await res.blob();
      const fileUrl = URL.createObjectURL(fileBlob);
      
      // 触发浏览器下载
      const downloadLink = document.createElement('a');
      downloadLink.href = fileUrl;
      downloadLink.download = '员工报表.xlsx'; // 自定义下载文件名
      document.body.appendChild(downloadLink);
      downloadLink.click();

      // 清理临时资源
      downloadLink.remove();
      URL.revokeObjectURL(fileUrl);
    } catch (err) {
      console.error('导出失败:', err);
    }
  };

  render() {
    return (
      <div className="App">
        <button onClick={this.handleExport}>
          导出Excel报表
        </button>
      </div>
    );
  }
}

export default App;

注意事项

  • 需提前在 jsreport 服务配置中开启 CORS 跨域权限,允许你的 React 应用域名访问,生产环境建议配置为实际前端域名,测试环境可临时设置允许所有域名访问。
  • 如果 jsreport 服务开启了身份验证,需要在请求头中携带基础认证信息,参考代码中的注释部分配置即可。

内容的提问来源于stack exchange,提问作者Okira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:54:02