удаление строки из db с использованием node, mysql, express и pure js - PullRequest
0 голосов
/ 04 октября 2018

Я создаю простое приложение, используя node, express, mysql.

Я пытаюсь создать маршрут, с помощью которого я могу удалить строку из моей базы данных, я написал чистый javascript xhr.

при тестировании я получаю следующее сообщение об ошибке

POST http://localhost:3000/article/22 404 (не найдено)

вот чтоУ меня есть:

main.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 ]

0 голосов
/ 04 октября 2018

у вас есть маршрут удаления на вашем сервере, поэтому, если вы хотите отправить запрос на этот маршрут, вы должны передать параметр "DELETE" в xmlhttp.

, поэтому просто измените

xmlhttp.open("POST", page, true);
*От 1006 * до
xmlhttp.open("DELETE", page, true);

также этот ответ может помочь вам понять, используя XMLHttpRequest лучше

Не вставляйте параметры непосредственно в вашзапрос к базе данных

Как уже говорили другие, вы уязвимы для атак SQLInjection.Вы должны сначала оценить параметры, а не просто вставлять их непосредственно в SQL-запрос

0 голосов
/ 04 октября 2018

изменить POST на DELETE в вашем main.js -файле:

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

Вы получаете эту ошибку 404 NOT FOUND, потому что маршрут POST /article/:id не существует (это DELETE /article/:id).

Примечание. Ваш DELETE-запрос уязвим для SQL-инъекций атак escape-запросов-значений

Escapeзначения запроса:

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

Примечание. На самом деле правильный http-статус для этого случая - 405 METHOD NOT ALLOWED, но экспресс по умолчанию не различает эти случаи

0 голосов
/ 04 октября 2018

app.delete ожидает получения запроса DELETE.

xmlhttp.open("POST", page, true); отправляет запрос POST.

Измените второй аргумент на "DELETE", чтобы выполнить запрос DELETE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...