Использование идентификаторов html для запроса документа mongoDB - PullRequest
0 голосов
/ 16 февраля 2019

Я следую руководству по созданию приложения CRUD с использованием mongoDB, Express, JQuery и Node.js.Сейчас я пытаюсь добавить пользовательские функции и не могу ни отредактировать, ни получить документ, когда я отклоняюсь от кода, который я имитировал.Мне любопытно, что происходит.Я следовал за функцией удаления и редактирования, которая работала, чтобы создать новую функцию редактирования, чтобы позволить мне обновлять несколько полей и с другим пользовательским интерфейсом.Я также хочу, чтобы документ использовал поля для заполнения 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 голосов
/ 16 февраля 2019

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
});

Как только вы исправите эту часть своего кода, остальная его часть должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...