使用setTimeout会确保在NodeJS中执行某些操作吗?

时间:2016-11-03 13:47:51

标签: javascript node.js express

我正在使用ExpressJS创建REST后端。后端的一部分允许用户上传文件资产,该资产应该只存在10分钟。

使用setTimeout安全地在10分钟后删除文件,或者在NodeJS中有更好的方法吗?如何确保删除文件?这是我目前的解决方案:

router.post('/upload', fileUpload.single('asset'), (req, res) => {
  // Do something with the file
  res.status(201).end();
  setTimeout(() => {
    // Delete the file
  }, 600000);
});

1 个答案:

答案 0 :(得分:0)

您的方法不会扩展,因为它可能会产生大量延迟方法。更好的方法是将有关文件的信息存储到某个关联数组(对象)中,例如:

{ "path":"date_uploaded" }

如果有任何需要使用setInterval()删除的内容,请检查每个,比方说XX秒。即浏览整个结构,看看是否有超过10分钟前创建的任何标志。对于所有这些元素,您删除该文件并将其从数组中删除。

var pending = {};

router.post('/upload', fileUpload.single('asset'), (req, res) => {
  // Do something with the file
  pending[file_name] = (new Date()).getTime();
  res.status(201).end();
});

setInterval(
function(){
     // check each element of pending and see if it needs to be deleted
}, 30000);