Экспресс Отправить данные через тело запроса, но метод запроса GET? - PullRequest
0 голосов
/ 07 марта 2019

Привет, это мой первый пост, извините, если я делаю что-то не так, но будьте терпеливы со мной;)

Я пытаюсь отправить некоторые данные в формате JSON на мою БД MySQL с помощью Express, но всякий раз, когда я использую что-то другое, кроме app.get (), это не удается. Я думаю, это потому, что метод запроса, показанный в браузере, всегда GET, но я не знаю почему. Что я делаю неправильно? Как метод запроса может быть GET, когда я использую app.post ()?

const express = require('express');
const mysql = require('mysql');
const bodyParser = require('body-parser');

const db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'masterkey',
    database: 'articelStorage'
});

const app = express();
app.use(bodyParser.json());
app.use(express.json());

//connect to db
db.connect((err) => {
    if (err) {
        throw err;
    }
    console.log('Myql connected...');
});

app.listen('3000', () => {
    console.log('Server started and running on port 3000...');
});

app.get('/getOne/:code', (req, res) => {
    let sql = "SELECT * FROM articels WHERE acode ='" +req.params.code+"'";
    db.query(sql, (err, result) => {
        if (err) throw err;
            res.send(result);
    });
});

app.delete('/deleteOne/:code', (req, res) => {
    let sql = "DELETE FROM articels WHERE acode ='" +req.params.code+ "'";
    db.query(sql, (err, result) => {
        if (err) throw err;
            res.send(result);
    });
});

Вот результат, который я получаю:

Cannot GET /deleteOne/DE12345678

И заголовки:

Общие сведения:

Request URL: http://localhost:3000/deleteOne/DE12345678
Request Method: GET
Status Code: 404 Not Found
Remote Address: [::1]:3000
Referrer Policy: no-referrer-when-downgrade

Заголовки ответа:

Connection: keep-alive
Content-Length: 159
Content-Security-Policy: default-src 'self'
Content-Type: text/html; charset=utf-8
Date: Thu, 07 Mar 2019 13:12:36 GMT
X-Content-Type-Options: nosniff
X-Powered-By: Express

Заголовки запроса:

Accept: text/html,application/xhtml+xml,application/xml;
        q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Host: localhost:3000
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
            (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36

Спасибо заранее.

1 Ответ

1 голос
/ 07 марта 2019

Я думаю, здесь есть неправильное представление.

Когда вы объявляете app.get('/getOne/:code', (req, res)=>{..}), это означает, что маршрут доступен по HTTP GET.Аналогично для app.delete маршрут доступен методом запроса HTTP DELETE.

Теперь, когда вы открываете URL в браузере, это ВСЕГДА запрос HTTP GET.Вот почему /getOne будет работать, но не delete.

Вам нужно использовать приложение, похожее на Postman (или curl), чтобы проверить ваш REST API.

Если вы обращаетесь кконечную точку от Клиента, используйте axios или request или xmlhttprequest и задайте метод запроса, который вы хотите.

Например,

axios({url:url, method:'delete', { data: { foo: "bar" } });// or axios.delete(..)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...