嗨,大家好,我最近一直在学习车把,用express和mongodb创建一个应用程序,并使用把手作为模板引擎,但我的更新和删除按钮工作有一个小问题。这是我的代码和我尝试过的:
//这些是我用来更新和删除的方法。请求在邮递员中正常工作,但似乎无法弄清楚如何将它们连接到我的把手
app.put('/users/:id', (req, res) => {
const id = req.params.id;
console.log(id + " was hit")
const details = { '_id': new ObjectID(id) };
const user = { name: req.body.name, surname: req.body.surname, cellphone: req.body.cellphone};
db.collection('users').update(details, user, (err, result) => {
if (err) {
res.send({'error':'An error has occurred'});
} else {
res.send(user);
}
});
});
app.delete('/users/:id', (req, res) => {
const id = req.params.id;
const details = { '_id': new ObjectID(id) };
db.collection('users').remove(details, (err, item) => {
if (err) {
res.send({'error':'An error has occurred'});
} else {
res.send('User ' + id + ' deleted!');
}
});
});
在我的模板中,我有这个:
<div class="col-8">
<table class="table">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Surname</th>
<th scope="col">Cellphone</th>
<th></th>
<th></th>
</tr>
</thead>
{{#each users}}
<tbody>
<tr>
<td>{{name}}</td>
<td>{{surname}}</td>
<td>{{cellphone}}</td>
<span>
<a href="/users/{{_id}}" title="Delete this todo item">Delete</a>
</span>
</tr>
</tbody>
{{/each}}
</table>
</div>
但是当我按下删除按钮时,我得到了ReferenceError:id未定义错误,并且还尝试将_id更改为我的把手中的id,但我没有使用我的删除功能。
答案 0 :(得分:1)
您正尝试使用DELETE
标记创建包含链接的<a>
http请求。
您应该注意,由<a>
标记创建的html链接会使浏览器发出GET
http请求。
解决此问题的最佳方法是使用像axios这样的http客户端库。
以下是使用axios的示例:
标记:
<button onclick="deleteToDoItem( {{_id}} )"> Delete </button>
使用Javascript:
function deleteToDoItem(id) {
axios.delete("/users/"+id).then(function(response) {
console.log("Item Deleted");
})
}
作为替代解决方案,您可以通过某种方式覆盖后端代码中的原始http请求方法来解决此问题。
检查此项目的灵感:https://github.com/expressjs/method-override。
这可以让您通过将标记更改为以下内容来实现所需的结果:
<a href="/users/{{_id}}?_method=DELETE" title="Delete this todo item">Delete</a>