嘿,这是我的第一篇文章,对不起,如果我在这里做错了什么,请耐心等待;)
我试图使用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
提前谢谢。
答案 0 :(得分:1)
我认为这是一个误解。
声明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(..)