【发布时间】:2018-03-14 13:29:52
【问题描述】:
当用户按下给定记录的按钮时,我想删除我的 mongoDB 中的记录。供参考:
我已经设置了所有的 mongoose 和 redux 代码,但是我收到了这个错误:
这是我的行动:
//deletes a survey when user clicks button
export const deleteSurvey = (surveyId) => async dispatch => {
const response = await axios.delete("/api/surveys", surveyId);
dispatch({ type: FETCH_SURVEYS, payload: response.data });
};
这是我的路由处理程序:
app.delete("/api/surveys", requireLogin, (req, res) => {
Survey.findByIdAndRemove(req.surveyId, (err, survey) => {
let response = {
message: "Survey successfully deleted",
};
res.status(200).send(response);
});
});
记录列表正在基于组件的反应组件中呈现。我正在像这样导入我的操作:
import { deleteSurvey } from "../../actions";
并且在按钮的 onClick 事件上触发了对操作的调用:
<button
onClick={() => this.props.deleteSurvey(survey._id)}
className="btn-floating btn-large red"
>
<i className="material-icons">clear</i>
</button>
我该如何解决这个错误?
编辑:组件连接
function mapStateToProps({ surveys }) {
return { surveys }; //returns the surveys reducer from the combined reducers
}
export default connect(mapStateToProps, { fetchSurveys })(SurveyList);
编辑:新的错误信息
指的是:
return this.props.surveys.map(survey => {...}
编辑:从 API 获取调查
const surveys = await Survey.find({ _user: req.user.id }) //get all surveys for the current user
.select({ recipients: false }); //dont include recipients
res.send(surveys);
【问题讨论】:
-
你的组件连接了吗?动作是否映射?
-
我认为它没有正确连接以达到 deleteSurvey 操作。我已经在我的原始帖子中添加了代码。
-
需要在fetchSurveys旁边添加deleteSurvey:export default connect(mapStateToProps, { fetchSurveys, deleteSurvey })(SurveyList);
-
我收到一条新的错误消息。我已将其包含在我的帖子中。
-
好的,这意味着旧的错误现在已修复,调查的类型是什么?因为 map 只适用于数组
标签: node.js mongodb reactjs mongoose redux