Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从数据库加载所选项目?_Node.js_Reactjs_Mongodb_Express - Fatal编程技术网

Node.js 如何从数据库加载所选项目?

Node.js 如何从数据库加载所选项目?,node.js,reactjs,mongodb,express,Node.js,Reactjs,Mongodb,Express,所以我有一个默认的模型来查看我的数据,还有一个表单来输入数据。我想知道检索一项选定数据的最佳实践是什么?这是一个MERN堆栈 目前,我正在使用窗口散列,并将id添加到url中,然后以这种方式从数据库中检索,但我觉得这很简单,并且试图添加更新功能,这似乎会让人困惑 我曾经考虑过向redux添加一个currentID,但是我可以看到当它被持久化时出现的问题,并且您在查看之后去创建一个配方,最后编辑而不是创建 从url检索id const recipeId = window.location.hash

所以我有一个默认的模型来查看我的数据,还有一个表单来输入数据。我想知道检索一项选定数据的最佳实践是什么?这是一个MERN堆栈

目前,我正在使用窗口散列,并将id添加到url中,然后以这种方式从数据库中检索,但我觉得这很简单,并且试图添加更新功能,这似乎会让人困惑

我曾经考虑过向redux添加一个currentID,但是我可以看到当它被持久化时出现的问题,并且您在查看之后去创建一个配方,最后编辑而不是创建

从url检索id

const recipeId = window.location.hash.substr(1);
  const recipe = useSelector((state) =>
    state.recipes.find((r) => r._id === recipeId)
  );
我从mongo那里得到我的食谱

export const recipeList = async (req, res) => {
  try {
    const recipes = await recipeSheet.find();
    res.status(200).json(recipes);
  } catch (error) {
    res.status(404).json({ message: error.message });
  }
};
并存储到redux

export const getRecipes = () => async (dispatch) => {
  try {
    const { data } = await api.fetchRecipes();
    dispatch({ type: "FETCH_ALL_RECIPES", payload: data });
  } catch (error) {
    console.log(error.message);
  }
};

这取决于数据的大小。最好定义一个新的GET路径来检索单个记录,比如
BASE\u URL/api/recipes/123
,或者您可以为当前端点添加查询接受,以便在DB中查找特定id并返回它,比如
BASE\u URL/api/recipes?id=123
。原因除了优化(对于大型数据集),在将所有记录存储到redux存储之后,记录可能会发生更改,并且通过当前解决方案,您会将旧数据显示给用户。最佳实践告诉我们选择第一种方法作为解决方案,第二种方法通常用于过滤数据。然后,用户只需发送新的URL,就可以触发对新端点的新API调用并获取单个记录