gpt4 book ai didi

node.js - 使用 Node.js 和 Angular 6 在 mongoose 中存储 PDF 文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:15:10 25 4
gpt4 key购买 nike

我必须在 Mongoose 集合中存储大量数据,并且它变得非常大并且难以处理。我想将 PDF 文件保存在某个地方并将其链接到 mongoose 集合中,我不太确定最佳解决方案。由于大多数链接都是关于直接文件上传的,因为我使用的是 pdfmake 库,然后将其存储到集合中。

这是我当前的模型

annual.js

customerReport: {
createdBy: String,
creationDate: String,
hour: Number,
waitingHour: Number,
ccEmails: Array,
sendToEmail: String,
pdf: Schema.Types.Mixed,
customerNotes: String
},

此 pdf 包含完整的 pdf 内容。

当我最终保存和存储数据时,在我的 route

router.post('/stage/complete', (req, res, next) => {
var completed = new AnnualStage({
specs: req.body.specs,
contactDetails: req.body.contactDetails,
CalculationData: req.body.calculationData,
customersData req.body.customersData
customerReport: req.body.customerReport,
});
completed
.save()
.then(result => {
res.status(200).json({
result: result
});
})
.catch(err => {
res.status(500).json({
message: err.message
});
});
});

所有前端都是由Angular 6完成并生成所有数据和pdf并将其保存到mongo集合

你可以看到我在路由中添加了 GridF,但是它将在哪里存储文件以及它将如何链接回数据库?

最佳答案

免责声明:这应该是一条评论,但对于评论来说太长了。

您的代码有一个非常严重的标志,值得一提:

你应该under no circumstances在 http Controller 内调用 fs.readFileSync (或任何涉及 I/O 操作的同步方法)。

这将阻止所有用户请求,直到文件被读取。如果多个用户同时调用此端点,则大多数用户的请求将延迟很长一段时间

相反,您应该调用fs.readFile。使用 async/awaitutil.promisify 代码看起来几乎相同,不会阻塞主线程:

const util = require('util');
const readFile = util.promisify(fs.readFile.bind.fs); // not really sure the bind is really needed tbh, maybe util.promisify(fs.readFile) works too
router.post('/stage/complete', async (req, res, next) => {
var completed = new AnnualStage({
specialRequest: req.body.specialRequest,
contactDetails: req.body.contactDetails,
requestData: req.body.requestData,
customerRequests: req.body.customers,
customerReport: req.body.customerReport,
});
completed.customerReport.pdf.data = await readFile(req.body.customerReport);
completed.customerReport.pdf.contentType = 'application/pdf';
completed
.save()
.then(result => {
res.status(200).json({
message: 'Handling POST request to /completed',
result: result
});
})
.catch(err => {
res.status(500).json({
message: err.message
});
});
});

此更改将极大地改进您的帖子处理程序。

<小时/>

现在,你的问题。我真的不确定你在问什么。你说:

you can see inside I have added GridFs inside the route but where it will store the files and how it will link back to DB?

没有提及gridFs在你的代码片段中。也许您忘记粘贴一些代码?现在尚不清楚 AnnualStage.save() 是否实际保存在 mongo 中。它使用gridfs吗?

目前尚不清楚您的代码是否无法正常工作,或者您是否询问您的解决方案是否足够好。

关于node.js - 使用 Node.js 和 Angular 6 在 mongoose 中存储 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56390779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com