从表格中编辑项目时,它会提取/保存错误的信息

时间:2018-04-10 14:07:23

标签: node.js mongodb express mongoose ejs

所以,我正在研究一个CRUD应用程序,我正在努力使它能够在单击编辑时编辑项目。我可以使用req.params.id成功获取项目ID,并且它已成功将正确的信息打印到控制台中,但是当我将其发送到我的前端时,它仍然会更新集合中第一个条目的信息。下面是我用于此的代码。 后端:

router.get('/edit/(:id)', function (req, res, next) {
   var o_id = new ObjectId(req.params.id).toString();

   db.collection('projects').find({
     "_id": ObjectId(o_id).toString
   }).toArray(function (err, result) {
     if (err) return console.log(err)

     // if user not found
     if (!result) {
       req.flash('error', 'Project not found with id = ' + req.params.id)
       res.redirect('/projects')
     } else { // if user found
       console.log(result);
       // render to views/user/edit.ejs template file
       res.render('edit.ejs', {
         user: req.user,
         title: 'Edit User',
         //data: rows[0],
         projID: result[0]._id,
         projName: result[0].projectName,
         projStat: result[0].status,
         projEngineer: result[0].engineer,
         projCost: result[0].finalCost
       });
     }
   });
 });

列出项目的前端:

<tbody>
  <form action="/edit/<%=projID%>" method="post" class="d-flex align-self-center mx-auto" style="width:500px;height:500px;padding:0px;margin:0px;background-color:rgb(255,255,255);">
    <tr>
      <td>
        <input type="text" class="form-control" name="projName" value="<%=projName %>">
      </td>
      <td>
        <input type="text" class="form-control" name="projStat" value="<%=projStat %>">
      </td>
      <td>
        <input type="text" class="form-control" name="projEngineer" value="<%=projEngineer %>">
      </td>
      <td>
        <input type="text" class="form-control" name="projCost" value="<%=projCost %>">
      </td>
    </tr>
    <button class="btn btn-primary btn-block" type="submit" style="background-color:rgb(4,148,74);">Submit</button>
  </form>
</tbody>

编辑前端

<tbody>
  <form action="/edit/<%=projID%>" method="post" class="d-flex align-self-center mx-auto" style="width:500px;height:500px;padding:0px;margin:0px;background-color:rgb(255,255,255);">
    <tr>
      <td>
        <input type="text" class="form-control" name="projName" value="<%=projName %>">
      </td>
      <td>
        <input type="text" class="form-control" name="projStat" value="<%=projStat %>">
      </td>
      <td>
        <input type="text" class="form-control" name="projEngineer" value="<%=projEngineer %>">
      </td>
      <td>
        <input type="text" class="form-control" name="projCost" value="<%=projCost %>">
      </td>
    </tr>
    <button class="btn btn-primary btn-block" type="submit" style="background-color:rgb(4,148,74);">Submit</button>
  </form>
</tbody>

1 个答案:

答案 0 :(得分:0)

所以我想出了我的问题,我查询db的方式返回了所有对象,我只需要遍历它并找到id匹配的位置。感谢@andreiNikolaenko指出要检查它。