Express通过请求正文发送数据,但请求方法为GET?

时间:2019-03-07 13:30:21

标签: mysql node.js express

嘿,这是我的第一篇文章,对不起,如果我在这里做错了什么,请耐心等待;)

我试图使用Express将JSON格式的一些数据发送到我的MySQL数据库,但是每当我使用app.get()以外的其他东西时,它都会失败。我猜这是因为浏览器中显示的请求方法始终是GET,但我不知道为什么。 我究竟做错了什么?当我使用app.post()时,请求方法如何成为GET?

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 个答案:

答案 0 :(得分:1)

我认为这是一个误解。

声明app.get('/getOne/:code', (req, res)=>{..})时,表示 HTTP GET 可以访问该路由。同样,对于app.delete,可以通过请求方法 HTTP DELETE 访问该路由。

现在,当您在浏览器中打开一个URL时,总是一个HTTP GET请求。这就是/getOne可以工作的原因,而delete不能工作的原因。

您需要使用类似Postman(或curl)的应用程序来测试REST api。

如果要从客户端访问端点,请使用axiosrequestxmlhttprequest并设置您希望的请求方法。

例如,

axios({url:url, method:'delete', { data: { foo: "bar" } });// or axios.delete(..)