React/Node.js: Не удается удалить запись из интерфейса и базы данных

#javascript #node.js #reactjs #database

Вопрос:

Поэтому в настоящее время я изучаю react и пытаюсь создать простое CRUD-приложение. Для этой цели я создал простой интерфейс, где вы можете ввести название фильма и дать краткий обзор. Фильм и обзор сохраняются в базе данных и отображаются на интерфейсе. Как вы можете видеть, я уже добавил фильмы «Начало» и «художник-катастрофа».

Теперь я хочу иметь возможность удалять записи из интерфейса и моей базы данных. Вот почему я реализовал кнопку удаления. К сожалению, всякий раз, когда я пытаюсь что-то удалить, я получаю эту ошибку: введите описание изображения здесь

Я абсолютно не представляю, что означает эта ошибка и откуда она берется. Я действительно благодарен за любой совет, потому что я смотрел на это в течение нескольких часов, не понимая этого ^^ Вот мой код:

App.js

 import React, {useState, useEffect} from "react"; import './App.css'; import Axios from 'axios';  function App() {   const [movieName, setMovieName] = useState(''); const [review, setReview] = useState(''); const [movieReviewList, setMovieReviewList] = useState([]);   useEffect(()=> {  Axios.get("http://localhost:3001/api/get").then((response) =>   {    setMovieReviewList(response.data)  }) });  const submitReview = () => { Axios.post('http://localhost:3001/api/insert', {  movieName : movieName, movieReview : review}).then(() =>{     //adds the new movie that we added to our databa to display it on the mapping  setMovieReviewList([...movieReviewList, {movieName: movieName , movieReview: review} ])  }) }; const deleteReview = (movie) => { Axios.delete(`http://localhost:3001/api/delete/${movie}`);  }   return (  <div className="App">  <h1>CRUD Application</h1>  <div className = "form" >  <label>Movie name : </label>  <input type = "text" name = "movieName" onChange={(e) =>{  setMovieName(e.target.value)  }} ></input>   <label>Review : </label>  <input type = "text" name = "review" onChange={(e) =>{  setReview(e.target.value)}} ></input>   <button onClick={submitReview}> Submit</button>   {movieReviewList.map((val)=>{  return <div className="card">  <h2>{val.movieName}</h2>  <p>{val.movieReview}</p>  <button onClick={()=> {deleteReview(val.movieName)}}>Delete</button>  <input type ="text" id = "updateInput"></input>  <button>Update Review</button>    </div>  })}  </div>  </div>  ); }  export default App;   

index.js

 const express = require('express'); const bodyParser = require ('body-parser'); const app = express(); const mysql = require('mysql'); const cors = require('cors');  const db = mysql.createPool({  host: "localhost",  user: "root",  password:"password",  database:'CRUDDatabase', });   app.use(cors()); app.use(express.json()); app.use(bodyParser.urlencoded({extended: true}))  app.get('/api/get', (req,res)=>{   const sqlSelect = 'SELECT * FROM CRUDDatabase.Movie_Reviews;'  db.query(sqlSelect, (err,result)=> {  res.send(result);  })  })  // app.post('/api/insert', (req,res)=>{  const movieName = req.body.movieName;  const movieReview = req.body.movieReview;   const sqlInsert = 'INSERT INTO movie_reviews (movieName, movieReview) VALUES (?,?)'  db.query(sqlInsert, [movieName, movieReview], (err, result) => {  //console.log(result);  }); })  app.delete("api/delete/:movieName"), (req,res)=>{  const name = req.params.movieName;  const sqlDelete = "DELETE FROM movie_reviews WHERE movieName = ?";   db.query(sqlDelete, name, (err, result)=>{  if (err) console.log(err);   })  }  app.listen(3001, () => {  console.log("running on port 3001") })   

Ответ №1:

В бэкэнд-коде похоже, что в конечной точке отсутствует косая черта.

Изменение с:

 app.delete("api/delete/:movieName"), (req,res)=>{  

Для:

 app.delete("/api/delete/:movieName"), (req,res)=>{  

Комментарии:

1. Нет, это, похоже, не ошибка. Я изменил его, но все равно получаю ту же ошибку 🙁

Ответ №2:

Хорошо, я нашел это, и это была просто простая синтаксическая ошибка:

в бэкэнде вместо:

 app.delete("api/delete/:movieName"), (req,res)=>{  const name = req.params.movieName;  const sqlDelete = "DELETE FROM movie_reviews WHERE movieName = ?";   db.query(sqlDelete, name, (err, result)=>{  if (err) console.log(err);   })  

это должно быть:

 app.delete("/api/delete/:movieName", (req,res)=>{  const name = req.params.movieName;  const sqlDelete = "DELETE FROM CRUDDatabase.Movie_Reviews WHERE movieName = ?";   db.query(sqlDelete, name, (err, result)=>{  if (err) console.log(err);   });  })