我正在用node,express,mysql创建一个简单的应用程序。
我正在尝试创建一个路由,用它可以从数据库中删除一行,我编写了一个纯javascript xhr。
当我测试它时,我不断得到以下错误消息
岗位http://localhost:3000/文章/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);
}
}
以及路线app.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('/')
}
});
});
我错过了什么?
非常感谢您的帮助!谢谢。
3条答案
按热度按时间qybjjes11#
改变
POST
至DELETE
在你的main.js
-文件:你得到这个了
404 NOT FOUND
错误,因为路由POST /article/:id
不存在(它是DELETE /article/:id
).注意:您的delete查询易受sql注入攻击的攻击
转义查询值:
注意:实际上,这种情况下正确的http状态是
405 METHOD NOT ALLOWED
,但默认情况下express不区分这些情况w6lpcovy2#
app.delete
期望收到删除请求。xmlhttp.open("POST", page, true);
正在发送post请求。将第二个参数改为
"DELETE"
发出删除请求。nzk0hqpo3#
服务器中有一个删除路由,因此如果要向该路由发送请求,应该传递
"DELETE"
xmlhttp的参数。所以只要改变
到
此外,这个答案可能有助于您理解
XMLHttpRequest
更好的不要直接在数据库查询中插入参数
正如其他人所说,您很容易受到sqlinjection攻击。应该首先计算params,而不是直接将其插入sql查询