从mongo数据库集合中获取单个文档

时间:2019-02-16 09:46:50

标签: javascript reactjs mongodb express redux

如何通过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错误中学习。

0 个答案:

没有答案