如何通过react / redux / express从mongo集合中提取单个文档?
我有一个可以运行的应用程序,可以从mongoDB中获取记录的集合,但是,我希望能够根据我在react-设置的Route中具有的参数id从集合中获取一条记录。路由器域。
我尝试了Model.find({ _id: req.params.id})
和Model.findById({ _id: req.params.id})
。我还搜索了与此相关的其他帖子,但是由于我对事物的后端很熟悉,因此我仍然遇到人际隔离的问题。
客户端React路由:
<Router history={history}>
<div className="container">
<Header />
<Route exact path="/" component={LandingPage} />
<Route exact path="/budgets" component={Dashboard} />
<Route exact path="/budgets/new" component={BudgetForm} />
<Route exact path="/budgets/edit/:id" component={BudgetEdit} />
<Route exact path="/budgets/delete/:id" component={BudgetDelete} />
<Route exact path="/budgets/:id" component={BudgetShow} />
</div>
</Router>
动作创建者:
export const fetchBudget = (budgetId) => async dispatch => {
const res = await axios.get(`/api/budgets/${budgetId}`);
dispatch({ type: FETCH_BUDGET, payload: res.data });
}
异径管:
const initialState = {
budgetList: [].
budget: {}
}
export default (state = initialState, action) => {
switch (action.type) {
case FETCH_BUDGETS:
return { ...state, budgetList: action.payload };
case FETCH_BUDGET:
return { ...state, budget: action.payload };
default:
return state;
}
}
快捷路线:
app.get('/api/budgets/:budgetId', requireLogin, async (req, res) => {
const budget = await Budget.findById({ _id: req.params.budgetId });
res.status(200).json(budget);
});
预期结果:
我希望当我单击所需的文档时,它将从URL中获取params.id,并将其传递给我的动作创建者,然后将其触发以进行表达,然后使用该params.id进行查找在我的数据库中,因此将其作为动作创建者有效负载中的res.data返回。我可以使用返回记录中的数据。
实际结果:
每当我解雇动作创建者并提出请求时,我都会得到:
GET http://localhost:3001/api/budgets/5c66716c1ed9920920123a3d 404 (Not Found)
Uncaught (in promise) Error: Request failed with status code 404
回购: https://github.com/laere/budgety
编辑:做了更多的挖掘工作,找到了一个使用确切的框架和功能进行挖掘的类似项目。更新了代码和存储库,更改仍然遇到相同的问题。
编辑:问题已解决,请仔细阅读以下内容
我正在使用http代理中间件。我忘记将api路由添加到我正在使用的路由的代理文件中。希望有人从这篇文章和我的noobie错误中学习。