NodeJS通过时间戳按时显示文档

时间:2019-02-25 20:45:55

标签: javascript node.js mongodb datetime mongoose

我有6个用户层。这是他们应该做的:

  • 第一层:立即查看正在发布的帖子。
  • 第二层: 60分钟后
  • 第三层: 120分钟后
  • 查看同一则帖子
  • 第4层:在240分钟后看到相同的帖子
  • 第五层: 360分钟后
  • 查看同一则帖子
  • 第6层:在24小时后看到同一帖子

每个用户在网站上注册时都会获得export const setFlightAwareAlert = functions.https.onRequest(async (request, response) => { const body: {[key: string]: any} = request.body; const data = new FormData(); Object.keys(body).forEach(key => data.append(key, body[key])); let alert_id; try { alert_id = await axios.post(urls.setAlert, data, { headers: { 'Content-Type': 'application/json', 'Authorization': `Basic ${AUTH_ENCODED}`, ...data.getHeaders() }, withCredentials: true }) } catch(err) { console.log(err) } response.json(alert_id && alert_id.data); }); 设置。

现在,当有人将数据发布到网站时,这就是猫鼬中的文档结构的样子:

doc comments

对于您看到的时间戳,我正在使用moment.js且仅使用普通函数:tier此处的所有时间戳都在用户层应看到该帖子时设置。

现在,我需要通过经过身份验证的用户层来获取这些文档。这就是我现在正在做的事情:

moment();

我不知道如何从app.get('/', async(req, res) => { if(req.session.user && req.cookies.user_sid){ let user = await User.findOne({username:req.session.user.username}); if(user.group = "Tier 1") { let advertisements = await Advertisement.find(); res.render('index', {user, advertisements}); // TIER 1 SEES ALL POSTS IMMEDIATELY. } if(user.group = "Tier 2") { let advertisements = await Advertisement.find(); // Now I need some logic here so the tier 2 users could see post after 60 minutes from when it was posted. res.render('index', {user, advertisements}); } } else { res.render('index'); } });

获取结果

1 个答案:

答案 0 :(得分:0)

我认为您可以通过存储每个广告添加到系统中的时间来获得更大的成功-这样,您可以根据用户的tier修改Advertisement对象上的过滤器:

// Imagine the following Advertisements:
[
  {
    "name": "ad-1",
    "created_at": ISODate(2019-02-01)
  },
  {
    "name": "ad-2",
    "created_at": ISODate(2019-02-25)
  }
]

let offset;
if (user.group === "Tier-1") {
  offset = 0;
} else if (user.group === "Tier-2" {
  offset = 60 * 60 // remember, it's in seconds!
} else if (user.group === "Tier-3" {
  ....
}

const now = Date.now();

await db.Users.find({
  "created_at" < (now - offset)
});