Javascript CRUD:如何在没有Mongoose的情况下使用Node、Express、MongoDB按ObjectID删除文档?
我是后端新手,目前使用Node/Express/MongoDB和前端的EJS模板。我正在尝试构建一个简单的todo列表应用程序,用于在不使用Mongoose的情况下练习CRUD操作,只使用原生MongoDB。通过单击按钮使用ObjectID,很难找出如何删除/更新列表中的项目。一个月以来,我一直在尝试不同的方法,寻找解决方案,但仍然没有成功。到目前为止,我已经找到了如何通过ObjectID将其删除和更新,方法是在express delete request筛选器中键入实际ID,或者将其添加到fetch url的末尾,并在express delete请求中使用req.params.ID来捕获从fetch url传递的ID。但这不起作用,因为我不知道添加ObjectID的新项目是什么。那么,在不知道新Id是什么的情况下,如何通过单击按钮使其通过ObjectID删除/更新每个项目呢?我做错了什么?似乎我需要以某种方式将ID传递到获取url的末尾,但我不确定如何抓取和附加它。请原谅我的收藏名称lol这是我的动机 这是我的密码:Javascript CRUD:如何在没有Mongoose的情况下使用Node、Express、MongoDB按ObjectID删除文档?,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我是后端新手,目前使用Node/Express/MongoDB和前端的EJS模板。我正在尝试构建一个简单的todo列表应用程序,用于在不使用Mongoose的情况下练习CRUD操作,只使用原生MongoDB。通过单击按钮使用ObjectID,很难找出如何删除/更新列表中的项目。一个月以来,我一直在尝试不同的方法,寻找解决方案,但仍然没有成功。到目前为止,我已经找到了如何通过ObjectID将其删除和更新,方法是在express delete request筛选器中键入实际ID,或者将其添加到fe
//EJS CODE (index.ejs)
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Conquering</title>
<meta charset="UTF-8">
</head>
<body>
<form action="/kickass" method="POST">
<input type="text" placeholder="Name" name="name">
<input type="number" placeholder="Age" name="age">
<input type="text" placeholder="Location" name="location">
<button type="submit">Submit</button>
</form>
<ul>
<% for(let i = 0; i < kickass.length; i++) {%>
<li>
<span><%= kickass[i].name + kickass[i].age + kickass[i].location %></span>
<button type="button" class="delUserBtn">X</button>
</li>
<% } %>
</ul>
<script src="main.js"></script>
</body>
</html>
删除控制器(main.js)
const delUserBtn=document.queryselectoral('.delUserBtn');
for(设i=0;i{
如果(res.ok){
资源状况(200)
}
})
.then(window.location.reload())
.catch(console.error)
};
此代码当前不起作用,但如果将ID传递到获取URL的末尾,或用实际ID替换req.params.ID,则此代码将起作用。这正是我经过3-4周的研究和尝试后所处的位置。请访问此网站:
您可以在EJS文件的按钮中设置自定义数据属性。该自定义数据属性可以保存todo列表项的对象ID。单击后,您可以使用“this”关键字访问函数中的自定义数据属性。好的,我会尝试一下,然后告诉您。非常感谢你。
//EXPRESS CODE (app.js)
require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
const ejs = require('ejs');
const ObjectID = require('mongodb').ObjectID;
const MongoClient = require('mongodb').MongoClient;
const dbUrl = process.env.DATABASE_URL;
const port = process.env.PORT || 7000;
const app = express();
// SERVER
app.listen(port, () => {
console.log(`Server is listening on port ${port}..`);
});
// DATABASE
MongoClient.connect(dbUrl, { useUnifiedTopology: true }, (err, client) => {
// CHECK FOR ERRORS & CONNECTION
if (err) throw err;
console.log('Database connection established..');
// DATABASE & COLLECTION CONFIG
const db = client.db('mydb');
const dbCollection = db.collection('kickass');
// MIDDLWARES
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.static('public'));
// READ ROUTES
app.get('/', (req, res) => {
dbCollection.find().toArray()
.then(results => {
res.render('index.ejs', { kickass: results });
})
.catch(error => console.error(error))
});
// CREATE ROUTES
app.post('/kickass', (req, res) => {
dbCollection.insertOne(req.body)
.then(results => {
console.log(`1 document added`);
res.redirect('/');
})
.catch(error => console.error(error))
})
// DELETE ONE ROUTES
app.delete('/kickass/:id', (req, res,) => {
let o_id = ObjectID(req.params.id);
dbCollection.findOneAndDelete({ _id: o_id }, (err, result) => {
if (err) throw err;
res.send('user deleted')
})
})
});
DELETE CONTROLLER (main.js)
const delUserBtn = document.querySelectorAll('.delUserBtn');
for(let i = 0; i < delUserBtn.length; i++) {
delUserBtn[i].addEventListener('click', delUser);
};
function delUser() {
fetch('/kickass/:id', {
method: 'delete',
headers: { 'Content-Type': 'application/json' },
})
.then(res => {
if(res.ok) {
res.status(200)
}
})
.then(window.location.reload())
.catch(console.error)
};