2016-10-10 2 views
0

Итак, я изучаю Node.js и Express и использую его для создания простого веб-приложения, которое выполняет операции CRUD в базе данных mongoDB. Я могу успешно вставить информацию в базу данных и обновить ее, но я не могу понять, как обновить флажковую информацию. Примечание. Я посмотрел на Passing checkbox values to database using JavaScript, и это не помогло, так как оно находится в meteor.jsОбновление MongoDB с пометкой

В моем файле EJS. Это информация, которую пользователь должен вставить, чтобы обновить соответствующую запись в базе данных. Для краткости я опустил некоторые элементы формы.

<div id="editForm" hidden> 
    Enter name of the entry you want to edit?<input type="text" placeholder="full name" id="editItem" name="editItem" required><br> 
    Full Name<input type="text" placeholder="full name" id="fullName" name="name" required><br> 
    Age <input type="number" name="age" min="18" max="95" id="age" required><br> 
    Programming Languages <br> <input type="checkbox" class="p_languages2" name="p_languages2" value="Java" required>Java 
    <input type="checkbox" name="p_languages2" class="p_languages2" value="C++">C++ 
    <input type="checkbox" name="p_languages2" class="p_languages2" value="Python">Python 
    <input type="checkbox" name="p_languages2" class="p_languages2" value="Ruby">Ruby 
    <input type="checkbox" name="p_languages2" class="Jp_languages2" value="JavaScript">JavaScript<br> 
    Available to start work? <input type="date" id="start_date" name="start_date" required><br> 
    Life Motto? <input type="text" placeholder="motto" id="motto" name="motto" required><br> 
    <button onClick='putRequest()' type="submit" id="editEntry">Submit</button> 
    </div> 

function putRequest() { 
    fetch('/view', { 
     method: 'PUT', 
     headers: {'Content-Type': 'application/json'}, 
     body: JSON.stringify({ 
      'editedItem': document.getElementById("editItem").value, 
      'name': document.getElementById("fullName").value, 
      'age': document.getElementById("age").value, 
      //how can I extract the checkboxes? 
      'start_date': document.getElementById("start_date").value, 
      'motto': document.getElementById("motto").value 
     }) 
    }) 

    window.location.reload(true); 

И вот мой запрос на получение дополнительной информации. Обратите внимание, что «p_languages»: req.body.p_languages ​​- это просто местозаполнитель, я знаю, что он не работает.

app.put('/view', function(req, res) { 
    console.log("Put is working!"); 
    db.collection('jobs').findAndModify(
     {"name": req.body.editedItem }, 
     {}, 
     {$set: 
      { "name": req.body.name , "job_title": req.body.job_title, "gender": req.body.gender, 
      "p_languages": req.body.p_languages, "age": req.body.age, "start_date": req.body.start_date,"motto": req.body.motto } 
     }, 
     {}, 
     function(err, object) { 
      if (err){ 
       console.warn(err.message); // returns error if no matching object found 
      }else{ 
       console.log("Update complete"); 
      } 
     }) 


}) 

ответ

0

Вы можете обратиться ко всем флажков с помощью name атрибута, как это, var checkboxes = document.getElementsByName("p_languages2");. Это вернет флажки с p_languages2. Теперь вам просто нужно перебрать этот массив и получить value всех флажков, которые отмечены checkboxes[i].checked, и сохранить эти значения в массиве и обновить этот массив на сервере. Refer to this plnkr.

Смежные вопросы