【问题标题】:Trying to make my delete button working in REACT试图让我的删除按钮在 REACT 中工作
【发布时间】:2020-08-26 00:27:57
【问题描述】:

有人能在我的代码中找到错误吗?我正在尝试使删除按钮起作用,以删除已单击的特定挑战。

控制台中的错误:

xhr.js:178 DELETE http://localhost:3000/allchallenges/5eb4398f2650390017030bcf 404(未找到)


具有删除按钮的前端组件

import React from 'react'
import DefaultLayout from "../layout/Default"
import Challengebox from '../components/Challengebox'
import axios from "axios";

class Allchallenges extends React.Component {
    constructor() {
        super()

        this.state = {
           challenges: []
        }

        this.onDelete=this.onDelete.bind(this)
    }

    componentDidMount(){
        axios({
            method: "GET",
            url: `${process.env.REACT_APP_API_BASE}/allchallenges`,
            withCredentials: true
        })
        .then(response => {
            console.log(response)
            let challengeslist = response.data;
            this.setState({challenges: challengeslist})
        })
        .catch(error => {
            console.log("You've made an error charles: ",error)
        })
    }

    onDelete(challengeId){
        axios
        .delete(`${process.env.REACT_APP_API_BASE}/allchallenges/${challengeId}`)
        .then(response => {
            this.props.history.push("/allchallenges")
        })
        .catch(err => console.log(err))
    }

    render() {
        return (
            <DefaultLayout>
                <div className="challengeoverviewlist">
                    <h1>All challenges</h1>   

                    <div className="challengeboxes">

                    {    
                    this.state.challenges.map(challenge => 
                        (
                            <div className="totalbox" key={challenge._id}>

                                <Challengebox 
                                    key={challenge._id} 
                                    id={challenge._id} 
                                    title={challenge.title} 
                                    description={challenge.description}
                                />

                                <button onClick={() => this.onDelete(challenge._id)}>
                                    Delete
                                </button>

                            </div>
                        ))                                                                      
                    }

                    </div>

                </div>    
            </DefaultLayout>
        )
    }
}

export default Allchallenges

我的 api:

//request challenges
router.get("/allchallenges", (req,res) => {
  Challenge
  .find()
  .then(response => {
    res.json(response)
  })
  .catch(error => {
    res.json(error)
  })
})

//delete challenge
router.delete("/allchallenges", (req,res) => {
  Challenge
  .find()
  .then(response => {
    res.json(response)
  })
  .catch(error => {
    res.json(error)
  })
})

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    xhr.js:178 删除 http://localhost:3000/allchallenges/5eb4398f2650390017030bcf404(不 找到)

    404 : not found - 错误明确指出该路径的 api 不存在

    那么,您的快速 API 路由问题:

    改变这个:

    router.delete("/allchallenges",
    

    收件人:

    router.delete("/allchallenges/:id",
    

    注意:您可以使用req.params 访问参数

    【讨论】:

    【解决方案2】:

    也许你需要添加一个路由参数。

    router.delete("/allchallenges/:id", (req,res) => {
      Challenge
      .find()
      .then(response => {
        res.json(response)
      })
      .catch(error => {
        res.json(error)
      })
    })
    

    Also if you want to delete object and you are using mongoose you have to use Model.findByIdAndDelete

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多