(Express js)我应该如何在我的路由器中使用另一个模块? (我不断收到未定义的参考错误)
Posted
技术标签:
【中文标题】(Express js)我应该如何在我的路由器中使用另一个模块? (我不断收到未定义的参考错误)【英文标题】:(Express js) How should I use another module in my router? (I keep getting undefined reference error) 【发布时间】:2021-12-31 02:15:04 【问题描述】:我正在制作一个简单的 pdf 阅读器应用程序(使用 Mozilla 的 pdf.js 库),用户选择文件,然后网站自动转到 /reader 页面,然后显示 pdf,但我不知道我应该如何将该 pdf 文件实际传输到我的其他页面,我试过这样做:
这是我的 server.js
import express from 'express';
const app = express();
import router from '../routes/reader.js';
const port = 5500;
const ip = '127.0.0.1';
app.set('view engine', 'ejs');
app.use('/css', express.static('css'));
app.use('/node_modules', express.static('node_modules'));
app.use('/js', express.static('js'));
app.use('/docs', express.static('docs'));
app.use('/reader', readerRouter);
app.get('/', (req, res) =>
res.render('index')
);
app.listen(port, IP);
这是我从输入中获取文件并将其发送到指定 URL 的地方,这是我使用脚本标签添加到主页的脚本
uploadInput.onchange = (e) =>
let file = e.target.files[0];
let fd = new FormData();
fd.append(uploadInput, file);
$.ajax(
url: '/reader',
method: 'POST',
data: fd,
cache: false,
processData: false,
contentType: 'application/pdf'
).done(() =>
window.location.href = '/reader';
);
在我的 /reader 路由器中,我这样做了:
const express = require('express');
import showPdf from '../js/pdf.js';
const router = express.Router();
router.get('/', (req, res) =>
res.render('reader');
);
router.post('/', (req, res) =>
res.redirect('/reader');
showPdf(req.body);
);
export default router;
我无法轻松导入 pdf.js 脚本,它会抛出一个错误,说我不能在模块之外使用导入等...我是 node.js 的新手,我不知道如何这些模块可以工作,我应该如何正确导入和使用它们,但是在尽我所能解决导入问题之后,现在我在我的 pdf.js 脚本中收到一个错误消息,指出 pdfjsLib is not defined
这是 pdf.js 脚本:
pdfjsLib.GlobalWorkerOptions.workerSrc = '../node_modules/pdfjs-dist/build/pdf.worker.js';
const eventBus = new pdfjsViewer.EventBus();
const pdfLinkService = new pdfjsViewer.PDFLinkService( eventBus );
// Get document
function showPdf(file)
let fileReader = new FileReader();
fileReader.readAsArrayBuffer(file);
fileReader.onload = () =>
let typedArray = new Uint8Array(this.result);
pdfjsLib.getDocument(typedArray).promise.then(function (_pdfDoc)
pdfDoc = _pdfDoc;
);
它比这大得多,但这是我使用 pdfjsLib 和 pdfjsViewer 的方式,我在 html 脚本标签中的 pdf.js 脚本之前导入它们。
为什么找不到 pdfjsLib 和 pdfjsViewer?路由器在我的网站上的什么位置?这是因为路由器无法访问 pdfjsLib 全局变量吗?我应该如何使用依赖于像这样的一些全局变量的脚本?这种方法完全正确吗?我的意思是从输入中传输选定的文件并将其发布到我的其他页面。
【问题讨论】:
我看不到您在哪里导入pdfjsLib
和 pdfjsViewer
... 您提到“在您的 HTML 脚本标签之前导入它们”但那将是客户端...您在说关于服务器端的node.js......这里有些东西还没有意义。
我应该在哪里导入这些文件?我尝试将它们导入到我的 pdf.js 文件中,然后 pdfjsLib 和 pdfjsViewer 的错误消失了,但是其他一些错误是说其他一些东西是未定义的,这与这两个文件的内部工作有关,我会测试再次他们,我会让你知道错误到底是什么意思
这是错误:node_modules\pdfjs-dist\web\pdf_viewer.js:2081 document.webL10n = function (window, document, undefined) ReferenceError: document is not defined ...
那么看起来pdfjs-dist
是用于客户端代码的。您不能在服务器端代码中使用它。它假定它在浏览器中运行。
对不起,我完全是网络开发的菜鸟,你的意思是我不能像我上面描述的那样做一个应用程序?并且没有办法获取该文件并将其提供给 pdfjsLib?
【参考方案1】:
您正在导出一个名为 router 的变量,然后在导入中查找 readrouter。将导入更改为:
import router from '../routes/reader.js
对于 pdfjsLib,我看不到您在哪里导入该库。因此,您只需导入 pdfjsLib 库即可对路由器执行相同的操作。如果您使用的是this package 它:
import pdfjsLib from 'pdfjs-dist'
【讨论】:
感谢指点,我改了好多次,这次都忘记了,可惜还是没解决,还是收到ReferenceError: pdfjsLib is not defined
我已经更新了我的答案以尝试和帮助。
不,这个 pdfjs 来自 mozilla:github.com/mozilla/pdf.js
我已经将它们添加到我的 html 脚本标签中,直到我将我的 pdf.js 脚本导入我的路由器脚本之前,它们都可以正常工作
你在客户端导入它,需要一个库在你的服务器上处理它以上是关于(Express js)我应该如何在我的路由器中使用另一个模块? (我不断收到未定义的参考错误)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Express 的多个文件中包含路由处理程序? [复制]