وفتی میخوای یه داکیمنتی بعد از یه مدتی به صورت خودکار حذف بشه بهترین کار اینه که از Time Ti Live خود مانگو استفاده بکنی. چند روش داری برای اینکار که در ادامه بهش پرداخته میشه.
وقتی داری schema رو تعریف میکنی بگی هر داکیومنتی که ایجاد میشه بعد از n ثانیه حذف بشه. خیلی راحت این موضوع رو میتونی روی createdAt سوار بکنی:
const mongoose = require('mongoose'); const { Schema } = require('mongoose'); const EXPIRES_AFTER_SECONDS = process.env.TOKEN_EXPIRES_AFTER_SECOND; console.log(EXPIRES_AFTER_SECONDS); // 86400 const tokenSchema = new Schema({ type: String, token: Object, userId: String, createdAt: { type: Date, default: Date.now(), expires: EXPIRES_AFTER_SECONDS }, }, { timestamps: { updatedAt: 'updatedAt' } }); module.exports = mongoose.model('tokens', tokenSchema);
ولی مشکلی که برای من پیش اومد این بود که بعد از یه دقیقه (به جای یه روز) داکیومنت رو پاک میکرد. برای اینکه بفهمم چه مشکلی وجو داره رفتم سراغ ترمینال و دستور mongo رو اجرا کردم. وقتی واردش شدم مثل تصویر زیر رفتم جلو:
همونطوری که میبینید expiresAfterSeconds برای createdAt ساخته شده ولی زمانش ۸۶ ثانیه هست! در حالی که من توی .env مقدارش رو ۸۶۴۰۰ ست کردم. چرا؟ چونکه وقتی از process.env استفاده میکنی باید اونو تبدیل به عدد بکنیش:
expires: Number.parseInt(EXPIRES_AFTER_SECONDS)
همین موضوع ساده یک روز منو با خودش درگیر کرده بود.