#mysql #node.js #express
#mysql #node.js #экспресс
Вопрос:
Привет, это мой первый пост, так что извините, если я делаю здесь что-то не так, но будьте терпеливы со мной;)
Я пытаюсь отправить некоторые данные в формате 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. Можете ли вы опубликовать код, который вы используете (интерфейсную часть) для вызова вашего api? Вы пытаетесь вызвать свою конечную точку непосредственно из браузера? Если это так, метод всегда будет GET . Вы можете протестировать свой API с помощью таких инструментов, как Postman : getpostman.com
2. Спасибо, я этого не знал. Теперь все ясно.
Ответ №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(..)