gpt4 book ai didi

node.js - 在 axios.delete() 上获取 404(未找到)

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:06 24 4
gpt4 key购买 nike

我正在尝试为我的调查创建应用程序实现删除功能。

我使用 MongoDB 和 mongoose 作为数据库,使用 node.js/Express 作为后端服务器,使用 React/Redux 作为前端。

虽然我认为我设置的路由正确,但我在 axios.delete() 上收到 404(未找到)。

错误表明 http://localhost:3000/api/surveys/delete/{the-survey-id-here}未找到。

我一直在阅读 axios、Express、mongoose 和其他网站的文档,但是没有任何效果。

我尝试了以下操作。

  • 使用findByIdAndRemove()而不是deleteOne()
  • 密码 surveyId在 Action 创建者中const response = await axios.delete("/api/surveys", data: { surveyId });
  • 使用<a></a>而不是<button></button>

这是我的代码。

SurveyList.js(具有删除按钮的 react 组件)

import { fetchSurveys, deleteSurvey } from '../../actions'

...

<div className="card-action">
<a className="red-text text-accent-1">Yes: {survey.yes}</a>
<a className="red-text text-accent-1">No: {survey.no}</a>
<button
className="btn-floating btn-small waves-effect waves-light red right"
onClick={() => this.props.deleteSurvey(survey._id)}
>
<i className="material-icons">delete_forever</i>
</button>
</div>

...

const mapStateToProps = ({ surveys }) => {
return { surveys }
}

export default connect(
mapStateToProps,
{ fetchSurveys, deleteSurvey }
)(SurveyList)

actions/index.js( Action 创建者)

export const deleteSurvey = (surveyId) => async dispatch => {
const response = await axios.delete(`/api/surveys/delete/${surveyId}`)

dispatch({ type: FETCH_SURVEYS, payload: response.data })
}

surveyRoute.js(路由处理程序)

app.delete('/api/surveys/delete/:surveyId', async (req, res) => {
await Survey.deleteOne({ _id: req.params.surveyId })

const surveys = await Survey.find({ _user: req.user.id }).select({
recipients: false
})
res.send(surveys)
})

服务器/index.js

const express = require('express')
const mongoose = require('mongoose')
const cookieSession = require('cookie-session')
const passport = require('passport')
const bodyParser = require('body-parser')
const keys = require('./config/keys')
require('./models/User')
require('./models/Survey')
require('./services/passport')

mongoose.connect(keys.mongoURI)

const app = express()

app.use(bodyParser.json())
app.use(
cookieSession({
maxAge: 30 * 24 * 60 * 60 * 1000, // milliseconds
keys: [keys.cookieKey]
})
)
app.use(passport.initialize())
app.use(passport.session())

require('./routes/authRoutes')(app)
require('./routes/billingRoutes')(app)
require('./routes/surveyRoutes')(app)

if(process.env.NODE_ENV === 'production'){
app.use(express.static('client/build'))

const path = require('path')
app.get('*',(req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
})
}

const PORT = process.env.PORT || 5000
app.listen(PORT)

最佳答案

In my case, leads/ is the end point. try your end point + survey id
With axios@^0.19.2

axios
.delete('/api/leads/' + id)
.then(res => {
dispatch({
type: DELETE_LEAD,
payload: id
});

关于node.js - 在 axios.delete() 上获取 404(未找到),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55404279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com