我想通过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>
虽然发送数据任务是带有字段项的对象
let task = {
item: newTask
}
但是您的模式希望任务作为字符串。
另一个问题可能是您要对主体进行字符串化,而Task(Object).save()需要对象。
根据您的模式,期望具有键“任务”的对象。
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
}