(Express js)我应该如何使用路由器中的另一个模块?(我不断收到未定义的引用错误)



我正在制作一个简单的pdf阅读器应用程序(使用Mozilla的pdf.js库(,用户选择文件,然后网站自动转到/rereader页面,然后它显示pdf,但我不知道我应该如何将该pdf文件转移到我的另一个页面,我试过这样做:

这是我的服务器.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';
});
}

在我的阅读器路由器中,我这样做了:

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全局变量吗?我应该如何使用依赖于像这样的全局变量的脚本?这种方法正确吗?我的意思是从输入中传输选定的文件,并将其发布到我的另一个页面。

您正在导出一个名为router的变量,然后在导入中查找readrouter。将导入更改为:

import router from '../routes/reader.js

对于pdfjsLib,我看不出您在哪里导入该库。所以,在为路由器做同样的事情时,只需导入pdfjsLib库。如果你正在使用这个软件包,它的:

import pdfjsLib from 'pdfjs-dist'

最新更新