使用 Node、MySQL、Express 和 Pure JS 从数据库中删除一行



我正在使用node,express,mysql创建一个简单的应用程序。

我正在尝试创建一个可以从数据库中删除一行的路由,我写了一个纯 javascript xhr。

当我测试它时,我不断收到以下错误消息

POST http://localhost:3000/article/22 404(未找到(

这是我所拥有的:

主.js

function handleDeleteClick(e, userId) {
e.preventDefault(); // Prevent default behaviour of this event (eg: submitting the form
// Perform the AJAX request to delete this user
var target = e.target;
var id = target.getAttribute('data-id');
var page = '/article/' + id;
var parameters = 'delete=true';
var xmlhttp = new XMLHttpRequest();
if (confirm('Are you sure you want to delete this?') == true) {
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
// Request completed
}
}
xmlhttp.open("POST", page, true);
xmlhttp.send(parameters);
}
}

和路由应用程序.js

app.delete('/article/:id', function(req, res) {
con.query(`DELETE FROM posts WHERE posts.id = ${req.params.id}`,
function(err, result, fields) {
if (err) {
console.log(err);
} else {
console.log("deleted Record: " + result.affectedRows);
res.redirect('/')
}
});
});

我错过了什么?

非常感谢帮助! 谢谢。

POST更改为main.js文件中的DELETE

xmlhttp.open("DELETE", page, true);

您收到此404 NOT FOUND错误,因为路由POST /article/:id不存在(DELETE /article/:id(。

注意:您的 DELETE 查询容易受到SQL 注入攻击,转义查询值

转义查询值:

con.query('DELETE FROM posts WHERE posts.id = ?', [req.params.id]); 

注意:实际上,这种情况的正确http状态是405 METHOD NOT ALLOWED,但默认情况下表达不会区分这些情况

app.delete希望收到 DELETE 请求。

xmlhttp.open("POST", page, true);正在发送 POST 请求。

将第二个参数更改为"DELETE"以发出 DELETE 请求。

您的服务器中有一个删除路由,因此如果要向该路由发送请求,则应"DELETE"参数传递给XMLHTTP。

所以简单地改变

xmlhttp.open("POST", page, true);

xmlhttp.open("DELETE", page, true);

此外,此答案可以帮助您更好地理解使用XMLHttpRequest

不要将参数直接插入数据库查询中

正如其他人所说,您容易受到 SQLInjection 攻击。 您应该首先计算参数,而不是将其直接插入到 SQL 查询中

最新更新