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

Express.js路由引用模块报错及PDF上传跳转展示问题咨询

核心原因

你遇到的所有问题根源是前后端运行环境完全隔离的认知误区:

  • Express的路由代码属于Node.js服务端代码,运行在你的服务器进程中
  • pdfjsLib、pdfjsViewer、你写的showPdf函数都属于前端代码,仅能在用户的浏览器环境中运行,两个环境的内存、全局变量完全不互通。你将前端脚本导入到后端路由中调用,自然找不到只有浏览器才会注入的pdfjsLib全局变量。
现有方案的错误点
  1. 逻辑链路完全不成立:你POST上传文件后跳转到/reader的GET请求是全新的独立请求,后端既没有暂存你上传的PDF,跳转后的新页面也无法拿到之前选中的本地文件。
  2. 上传请求配置错误:使用FormData传文件时,contentType需要设为false让jQuery自动处理边界分隔符,手动设为application/pdf会导致后端无法正常解析文件。
  3. 代码笔误:server.js中导入的路由变量名是router,注册中间件时写的是readerRouter,运行会直接报错。
  4. 路由逻辑错误:res.redirect执行后后续代码虽然会运行,但和用户端的页面已经没有关联,在服务端调用前端的showPdf没有任何意义。
修复方案

推荐你用最简单的纯前端实现方案,不需要后端参与文件处理,逻辑更简洁性能更高:

  1. 改造首页文件上传逻辑,不需要发POST请求,选中文件后直接将文件存入sessionStorage,再跳转页面:
uploadInput.onchange = (e) => {
  const file = e.target.files[0];
  const reader = new FileReader();
  reader.onload = () => {
    // 将文件转成base64存入sessionStorage
    sessionStorage.setItem('uploadedPdf', reader.result);
    // 直接跳转reader页
    window.location.href = '/reader';
  };
  reader.readAsDataURL(file);
}
  1. 后端/reader路由只保留GET渲染页面的逻辑,删除POST路由,删除导入showPdf的代码。
  2. reader页面加载时直接从sessionStorage取文件渲染即可:
// reader页面的js逻辑
pdfjsLib.GlobalWorkerOptions.workerSrc = '../node_modules/pdfjs-dist/build/pdf.worker.js';
const eventBus = new pdfjsViewer.EventBus();
const pdfLinkService = new pdfjsViewer.PDFLinkService({ eventBus });

window.onload = () => {
  const pdfData = sessionStorage.getItem('uploadedPdf');
  if (!pdfData) return location.href = '/';
  // 转成Uint8Array传给pdfjs
  const typedArray = Uint8Array.from(atob(pdfData.split(',')[1]), c => c.charCodeAt(0));
  pdfjsLib.getDocument(typedArray).promise.then(_pdfDoc => {
    const pdfDoc = _pdfDoc;
    // 后续渲染逻辑
  });
}
  1. 确认reader页面的依赖引入顺序正确:先引入pdf.js核心库,再引入viewer组件库,最后引入自定义脚本,即可解决pdfjsLib is not defined的报错。

如果你一定要走后端存储的方案,流程改为:

  • 后端接收到POST上传的PDF后,存入临时目录生成唯一文件ID,重定向到/reader?fileId=xxx
  • reader页面加载时从URL参数取fileId,请求后端接口拿文件流再传给pdf.js渲染
  • 额外添加临时文件定时清理逻辑避免服务器磁盘占用过高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:45:03