node.js - Nodejs 在特定时间后删除上传的文件

标签 node.js mongodb

我正在使用 Node 和 MongoDB 构建托管服务器。工作过程如下所示:

  1. 用户打开包含 4 个输入的表单的页面:
    • 发件人电子邮件
    • 收件人电子邮件
    • 从发送者到接收者的消息
    • 文件(多个)
  2. 用户正确填写所有输入并向服务器发送 POST 请求。
  3. 服务器使用 multer 处理表单并保存文件,然后在回调中准备存储从表单接收到的信息的具有字段数据的对象并将其发送到 MongoLab 上的数据库。
  4. 在将文档保存到数据库的回调中,服务器会向发送者和接收者发送邮件,并附上生成的链接,他们可以从该链接下载上传的文件。

现在我想在表单中实现额外的输入,用户可以在其中设置应从服务器删除其文件的日期。

所以要做两件事:按用户设定的时间删除文件和删除数据库中的文档。

您对如何实现这样的事情有一些想法吗?

最佳答案

要删除文件,只需使用fs.unlink()

const fs = require('fs');

const deleteFile = (file) => {
       fs.unlink("path/to/file/folder/"+file, (err) => {
           if (err) throw err;
       }
}

你想要创建一个setTimeout(),但是你需要找到在用户提供的日期之前还剩下多少时间,你应该这样做:

const time_remaining = (date_provided) => new Date(date_provided) - new Date();

然后只需使用setTimeout():

let timeOuts = []; // We create an array of timeouts in case we want to cancel one later
// I assume you use express and body-parser
app.post('/upload', (req, res) => {
     const timer = setTimeout( () => deleteFile(req.body.file), time_remaining (req.body.date));
     timeOuts.push(timer);
}

关于node.js - Nodejs 在特定时间后删除上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45389515/

相关文章:

node.js - Raspberry PI 上 NodeJS 中的长 setTimeout

ruby-on-rails - URL 缩短器如何大规模工作(例如 t.co 在 Twitter 的情况下)

node.js - 在 sails 中记录响应状态

Node.js 请求为什么在 try catch 中捕获 400 响应

javascript - 使用 Passport JS 获取当前登录的用户名?

MongoDB 投影计数大于 2 的文档

python - 将压缩的 csv 导入 mongo 集合时优化 python 代码性能

node.js - 使用 mongodb 更新复杂对象

java - 仅保留更改的字段

node.js - 为什么在实现 AWS SecretsManager 时收到 `Endpoint request timed out` 错误?