代码之家  ›  专栏  ›  技术社区  ›  user8331511

表单保存mongoose上的随机id生成

  •  1
  • user8331511  · 技术社区  · 7 年前

    因此,当前我有一个附加到用户id的表单,但是当我填写表单时,会生成一个随机id,因此表单实际上不会附加到用户id,因此当用户返回到其表单时,信息不会出现,因为它保存到新id而不是用户。身份证件。

    下面是一些代码

    // competition form details
    router.get('/dashboard/users/forms/competition-form/:id', ensureAuthenticated, (req, res) => {
      CompetitionForm.findById(req.params.id, function(err, competition){
        res.render('dashboard/users/forms/competition-form.hbs', {
          pageTitle: 'Competition Form',
          competitions: competition
        });
      });
    });
    
    // competition form details post
    router.post('/dashboard/users/forms/competition-form/:id', (req, res) => {
      CompetitionForm.findOneAndUpdate(req.params.id, req.body, {upsert:true}, (err, competition) => {
        if (err) {
          console.log(`Error saving data:  ${err}`);
          return res.send('Error saving data');
        }
    
        res.redirect('/dashboard');
        console.log(req.body);
      });
    });
    
    <form action="/dashboard/users/forms/competition-form/{{user.id}}" method="post" class="competitionformsubmit">
    

    此处的用户id为 5a7c7815656fa40fb5817630 然而,当我填写表格时 5a7c7c4ed8e033da6c40d260 已生成。

    我不知道我做错了什么。

    1 回复  |  直到 7 年前
        1
  •  0
  •   chridam Gino Claudi    7 年前

    您使用了错误的更新方法,而不是 findOneAndUpdate() 它需要一个查询对象作为第一个参数(您给它一个字符串),您需要 findByIdAndUpdate() 方法,该方法将字符串id作为第一个参数。

    findByIdAndUpdate(id, ...) 相当于 findOneAndUpdate({ _id: id }, ...)

    如果使用 findOneAndUpdate() 查询模型以外的其他字段 _id 键,在 user 字段,则可以重新构造代码以反映:

    // competition form details post
    router.post('/dashboard/users/forms/competition-form/:id', (req, res) => {
      CompetitionForm.findOneAndUpdate(
        {user: req.params.id}, // <-- query object
        req.body, 
        {upsert:true}, 
        (err, competition) => {
          if (err) {
            console.log(`Error saving data:  ${err}`);
            return res.send('Error saving data');
          }
    
          res.redirect('/dashboard');
          console.log(req.body);
        });
    });