2017-07-29 78 views
0

我正在用Node和MongoDB構建一個託管服務器。Nodejs在特定時間後刪除上傳的文件

  1. 用戶打開頁面的形式包含4個輸入:
    • 發送電子郵件
    • 接收電子郵件
    • 從發送信息到接收
    • 文件(多的工作是這個樣子過程)
  2. 用戶正確填寫所有輸入並在服務器上發送POST請求。
  3. 服務器處理表單並保存文件,然後在回調對象中存儲字段數據存儲從表單接收到的信息從MongoLab準備併發送到數據庫。
  4. 在將數據保存在數據庫中的回調中,服務器通過生成的鏈接發送郵件給發件人和收件人,從那裏他們可以下載上傳的文件。

現在我想實現額外的輸入來形成,其中用戶可以設置日期時,他的文件應該從服務器中刪除。

所以有兩件事要做:按用戶設置的時間刪除文件並刪除數據庫中的文檔。

你有一些想法如何實現這樣的事情?

+0

[TTL指數(HTTPS://docs.mongod b.com/manual/tutorial/expire-data/)可能是您的解決方案。否則,你可能應該建立你自己的基於「cron」的進程,可能基於[node-cron](https://www.npmjs.com/package/node-cron)或類似的實現。 –

+0

@NeilLunn看起來很有趣。我會盡力實施它並給你反饋。謝謝你的時間! :) – veritimus

+0

@NeilLunn,謝謝,這個想法與節點cron是偉大的! :) – veritimus

回答

0

要刪除一個文件,你可以簡單地使用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); 
} 
+1

似乎有趣!我會嘗試一下,稍後會給你反饋。謝謝你的時間! :) – veritimus

+1

工作,謝謝! :) – veritimus