【发布时间】:2019-11-03 17:33:10
【问题描述】:
我创建了一个简单的 REST 'todo-List',一切正常,除了从我的 mongoDB 中删除项目。
当我通过我的 main.js 文件删除一个项目时,我的“DELETE”方法收到 200 响应。但是该项目并未从 mongoDB 中删除,因此仍显示在我的列表中。
我使用了 deleteOne() 方法而不是 remove(),因为根据我收到的消息,后者已被弃用,但这不会扭转局面。
谁能帮帮忙。
我的 app.js 中的代码访问应该删除项目的数据库。
let express = require('express');
let app = express();
let bodyParser = require('body-parser');
let mongoose = require('mongoose');
mongoose.connect('mongodb+srv://Daniel:xxxxxx@clusterpetertester-h0t6v.mongodb.net/test?retryWrites=true&w=majority', {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });
let taskSchema = new mongoose.Schema ({
item: String
})
app.use(bodyParser.urlencoded({extended: true}));
app.set('view engine', 'ejs');
app.use(express.static('./'))
let Task = mongoose.model("Tasks", taskSchema);
app.get('/todoparents', function(req, res) {
Task.find({}, function(err, item) {
if (err) {
} else {
res.render('todoparents', {item : item})
}
});
});
//submit button route
app.post('/newTask', function(req, res) {
console.log(' item submitted! ');
let newItem = new Task({
item: req.body.input
})
Task.create(newItem, function (err, Task) {
if (err) console.log(err)
else {
console.log("Inserted Item : " + newItem)
}
})
res.redirect('todoparents');
});
app.delete('/todoparents/:item', function (req, res) {
//delete the requested item form mongodb
Task.find({item: req.params.item.replace(/\-/g,"")}).deleteOne(function (err, data) {
if (err) throw err;
res.json(data)
console.log(data)
});
});
let port = 3333;
app.listen(port);
console.log('The server is up on port #', port);
这是我的 todoparents.ejs 中的 html
<div class="container">
<h1>Time to burden the children</h1>
<ul id="taskList">
<% for(var i=0; i < item.length; i++) { %>
<li class="task-item<%=[i] %>">
<span class="task-info"> <%= item[i].item %> </span>
<span class="delete">Delete</span>
</li>
<% } %>
</ul>
</div>
main.js 中的代码在点击我的 todoparents.ejs 时获得正确的“跨度”
//gets the first span in an li and returns the textcontent
let taskList_Ul = document.getElementById('taskList');
taskList_Ul.addEventListener('click', function(e) {
let clickedElement = e.target;
let content_clicked_Sibling = clickedElement.previousElementSibling.textContent;
//the spaces are replaced with not spaces
let item = content_clicked_Sibling.replace(/ /g, "");
// getting the url and attaching the item which was targeted
fetch('/todoparents/' + item, {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
}
}).then(response => response.json()
.then(data => {
return data;
})
);
});
这是我从 app.js 中的 console.log(data) 获得的数据。似乎什么都没有被删除,因为最后我们已经 deleteCount: 0
{ n: 0,
opTime:
{ ts:
Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1572802291 },
t: 5 },
electionId: 7fffffff0000000000000005,
ok: 1,
operationTime:
Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1572802291 },
'$clusterTime':
{ clusterTime:
Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1572802291 },
signature: { hash: [Binary], keyId: [Long] } },
deletedCount: 0 }
尝试删除项目后的控制台图像。
【问题讨论】: