Mongodb仅获取ID:发布,而不发布表单中的数据

问题描述 投票:0回答:2

我想通过POST方法使用表单将数据发送到MongoDB。

似乎一切正常。按预期,当我单击“提交”按钮时,正在对mongoDB进行POST,但是POST不包含我输入到表单中的数据。发布到数据库的唯一内容是ID。

id  "5db45de0658c801a8813fa7f"
__v 0

这里是我的控制器中用于POST方法的代码段:

let bodyParser = require('body-parser');
let mongoose = require('mongoose');

mongoose.connect('?????????', {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });

let Schema = mongoose.Schema;

//the proposed schema
let TaskSchema_Kid = new Schema({
  task: String
});

// creates the document "database in MongoDB"
let Task = mongoose.model('Task', TaskSchema_Kid);

let urlencodedParser = bodyParser.urlencoded({extended: false});

module.exports = function (app) {
  app.post('/todoParents' , urlencodedParser, function (req, res) {
    let newTask = Task(req.body).save(function (err, data) {
      if (err) throw err;
      res.json(data);
      console.log('something happened')
    })
  })

}

这里是task.js中的代码:


  let submitButton = document.getElementById('button');
  let textField = document.getElementById('input');

  submitButton.addEventListener('click' , addItem);

  function addItem() {

    let newTask = textField.value;
    let task = {
      item: newTask
    }
    console.log(task)

    fetch("/todoParents", {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(task)
    }).then((res) => res.json())
    .then((data) => console.log(data))
    .catch((err) => console.log(err))

  }

};

这里是todoParents.ejs

<body>

    <div class="wrapper">

        <div class="assign">
          <form action="" method="post">
              <input id="input" name="input" type="text" placeholder="assign Task">
              <button id="button" type="submit">Burden the children</button>
            </form>
        </div>

        <div class="container">
          <h1>Time to burden the children</h1>

          <ul>
              <% for(var i=0; i < todos.length; i++) { %>
                <li><%= todos[i].item %> </li>
             <% } %>
          </ul>


        </div>
      </div>

      <script src="../public/assets/tasks.js"></script>

</body>
javascript node.js json mongodb
2个回答
0
投票

虽然发送数据任务是带有字段项的对象

let task = {
  item: newTask
}

但是您的模式希望任务作为字符串。

另一个问题可能是您要对主体进行字符串化,而Task(Object).save()需要对象。


0
投票

根据您的模式,期望具有键“任务”的对象。

let TaskSchema_Kid = new Schema({
  task: String
});

但是,在task.js中,您已使用键'item'定义了对象

 let task = {
   item: newTask
 }

因此,req.body具有以下结构的对象

{
 item:foo
}

解决方案

task.js中,将item更改为task

 let task = {
   task: newTask
 }
© www.soinside.com 2019 - 2024. All rights reserved.