После отправки формы пользователь может редактировать ее. Я хочу включить функцию таймера, чтобы после 2 часов отправки - PullRequest
0 голосов
/ 03 августа 2020

Я использую Nodejs, handlebar, jquery и mongodb / mongoosse для базы данных моего проекта.

После отправки формы пользователь может редактировать ее. Я хочу включить функцию таймера, который после 2 часов отправки пользователь не может редактировать форму и заблокирован. Как этого добиться?

1 Ответ

0 голосов
/ 03 августа 2020

Для этого вы можете создать новую схему с идентификатором пользователя (только он), а затем использовать свойство expires. Таким образом, это будет примерно так:

const editable = new mongoose.Schema({
  userId: String,
  createdAt: {type: Date, default: Date.now(), expires: 3600*2}
});
const Editable = mongoose.model('Editable', editable)

Теперь, когда вы сохраняете нового пользователя, асинхронно создайте Editable:

const user = new User(data)
user.save().then(async(userData) => {
  const editable = new Editable({userId: userData.id})
  await editable.save()
})

Затем вам нужно будет создать функцию промежуточного программного обеспечения это проверяет, существует ли документ на самом деле. Это может быть что-то вроде этого:

function isEditable(userId){
  Editable.countDocuments({userId : userId}, function (err, data) {
    if (data > 0){
      return true
    }else{
      return false
    }
  });
}

В этом примере у пользователя будет два часа на редактирование формы, поскольку через два часа документ с его идентификатором будет удален, а isEditable() функция вернет false.

Когда пользователь пытается отредактировать форму, вы можете реализовать функцию следующим образом:

router.get('/edit-form/:id', function(req, res, next){
  const user_id = req.params.id // This is an example of the get router to the edition form which takes the user id as a parameter

  if(isEditable(user_id)){ //Implementation of the function above
    //Render the form so the user can change it
  }else{
    res.status(403).send("Not allowed") //Status forbidden with a message
  }
})

Это всего лишь пример, вы можете реализовать функцию isEditable () где хотите, например в почтовом запросе издания.

...