使用html ID查询mongoDB文档

时间:2019-02-16 02:51:42

标签: jquery node.js mongodb express

我一直在遵循使用mongoDB,Express,JQuery和Node.js构建CRUD应用程序的教程。我现在尝试添加自定义功能,并且在偏离所模仿的代码时无法同时编辑和检索文档。我对正在发生的事情感到好奇。我遵循了有效的删除和编辑功能,以构建新的编辑功能,以允许我使用不同的UI更新多个字段。我也想让文档使用这些字段来填充网站不同部分中各个块的HTML,但是我无法使文档返回。

我确信get和put函数在Postman中可以正常工作。

正在起作用:

app.put('/:id',(req,res) =>{
  const todoID = req.params.id;
  const userInput = req.body;

  db.getDB().collection(collection).findOneAndUpdate({_id: 
  db.getPrimaryKey(todoID)}, {$set: {todo: userInput.todo}}, 
 {returnOriginal : false},(err,result)=>{
  if(err)
       console.log(err);
  else{
      res.json(result);
  }
 });
});

app.post('/',(req,res)=>{
  const userInput = req.body;
  db.getDB().collection(collection).insertOne(userInput, 
 (err,result)=>{
    if(err)
       console.log(err);
    else
      res.json({result: result, document: result.ops[0]});
  });
});


app.delete('/:id',(req,res)=>{
   const todoID = req.params.id;

  db.getDB().collection(collection).findOneAndDelete({_id : 
   db.getPrimaryKey(todoID)},(err,result)=>{
    if(err)
      console.log(err);
      else
       res.json(result);
     });
 });

此人在邮递员中工作,但在我的应用中不工作:

app.get('/', (req,res)=>{
  const todoID = req.params.id;
  db.getDB().collection(collection).findOne({_id: 
  db.getPrimaryKey(todoID)}, (err,documents)=>{
     if(err)
      console.log(err);
     else{
      console.log(documents);
      res.json(documents);
     }
  });
});

这很正常:

  const deleteShipment = (shipment, divShipmentID, deleteID) =>{
    let deleteBtn = $(`#${deleteID}`);
    deleteBtn.click(()=>{
      fetch(`/${shipment._id}`,{
        method: "delete"
      }).then((response)=>{
        return response.json();
      }).then((data)=>{
          if(data.ok == 1){
            $(`#${divShipmentID}`).remove();
          }
      });
    });
  }

这不是:

  const openEditOptions = (shipment, editID) =>{
    let editBtn = $(`#${editID}`);
    editBtn.click(()=>{
      console.log('activated');
      fetch(`/${shipment._id}`,{method: "get"}).then((response)=>{
        return response.json();
      }).then((data)=>{
        console.log(data);
        readyEditForm(shipment);
      });
    });
  }

这是HTML:

<button class="shipment-edit" id="edit_5c6759a05b4290e978136ea0" 
 type="button">Edit</button>

 <button type="button" class="shipment-delete" 
 id="delete_5c6759a05b4290e978136ea0">Delete</button>

我希望单击该特定“货件”的编辑按钮时,会将其登录到控制台“已激活”,并在控制台和函数readyEditForm中返回货件数据。什么都没发生。

1 个答案:

答案 0 :(得分:0)

req.params是一种在路径中:之后获取路由参数的方法。

app.get('/:id' (req, res) => {
console.log(req.params.id); //prints whatever the user put in place of ":id"
});

app.get('/' (req, res) => {
console.log(req.params.id); //prints undefined
});

一旦您修复了代码的那部分,其余部分就应该起作用。