Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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
Javascript 是否有方法在客户端检索和保存服务器响应(使用Node.js和React Native)_Javascript_Node.js_React Native_Mongoose_Axios - Fatal编程技术网

Javascript 是否有方法在客户端检索和保存服务器响应(使用Node.js和React Native)

Javascript 是否有方法在客户端检索和保存服务器响应(使用Node.js和React Native),javascript,node.js,react-native,mongoose,axios,Javascript,Node.js,React Native,Mongoose,Axios,我有一个帖子请求: router.post("/projects", async (req, res) => { const { projectName, projectDescription, projectBudget, projectDuration, industry, companyName, numberOfEmployees, diamond, } = req.body; cons

我有一个帖子请求:

router.post("/projects", async (req, res) => {
  const {
    projectName,
    projectDescription,
    projectBudget,
    projectDuration,
    industry,
    companyName,
    numberOfEmployees,
    diamond,
  } = req.body;
  console.log(diamond);

//diamond is an array having structure like this: diamond[ { criteria: {...} } ]

  const [projectDiamond] = diamond;

  const { criteria } = projectDiamond;

  if (
    !projectName ||
    !projectDescription ||
    !projectBudget ||
    !projectDuration ||
    !industry ||
    !companyName ||
    !numberOfEmployees ||
    !diamond
  ) {
    return res.status(422).send({ error: "Must provide all project details" });
  }

  try {
    const project = new Project({
      projectName,
      projectDescription,
      projectBudget,
      projectDuration,
      industry,
      companyName,
      numberOfEmployees,
      diamond,
      userId: req.user._id,
    });

    const recommendation = await Recommendation.find({
      "diamond.criteria": criteria,
    }); //Need to render this on front-end somehow!
    const projectsWithSameDiamond = await Project.find({
      "diamond.criteria": criteria,
    }); //Need to render this on front-end somehow!
    
    const projectsWithSameIndustry = await Project.find({ industry }); //Need to render this on front-end somehow!
    
    console.log(res);
    
    

    res.send(
      `Your project:\n\n${project}\n\nSimilar industry: ${projectsWithSameDiamond}\n\nSimilar diamonds: ${projectsWithSameIndustry}\n\nRecommendation: ${recommendation}`
    );
  } catch (err) {
    res.status(422).send({ error: err.message });
  }
});
正如你所看到的,我发送了许多变量作为响应。我想在react原生项目的组件中检索它们。我可以这样做:

const A = () => {
 
              axios.post("/projects", {
                projectName,
                projectDescription,
                projectBudget,
                projectDuration,
                industry,
                companyName,
                numberOfEmployees,
                diamond,
              })
              .then((result) => {
                console.log("I am result!");
                console.log(result.data);
              })
              .catch((err) => {
                console.log(err.response.data);
              });
    

}
const A = () => {
 ...
 return(
 <Text>{recommendation}<Text>
 <Text>{projectWithSimilarDiamond}<Text>
 <Text>{projectWithSimilarIndustry}</Text>
);

}
现在在
result
中,我可以检索数据,但我想检索、存储和呈现我在前端响应中输入的三个变量?如何检索和存储它们

例如:

const A = () => {
 
              axios.post("/projects", {
                projectName,
                projectDescription,
                projectBudget,
                projectDuration,
                industry,
                companyName,
                numberOfEmployees,
                diamond,
              })
              .then((result) => {
                console.log("I am result!");
                console.log(result.data);
              })
              .catch((err) => {
                console.log(err.response.data);
              });
    

}
const A = () => {
 ...
 return(
 <Text>{recommendation}<Text>
 <Text>{projectWithSimilarDiamond}<Text>
 <Text>{projectWithSimilarIndustry}</Text>
);

}
const A=()=>{
...
返回(
{建议}
{projectWithSimilarDiamond}
{ProjectWithSimilariIndustry}
);
}

我怎样才能做到这一点?目前我还不太清楚。

您应该通过使用从API返回JSON而不是纯文本。这样,您就可以控制它在应用程序上的外观

res.json({
项目
具有相同名称的项目,
同一行业的项目,
建议:,
});
对于API调用部分,您需要返回Promise对象以将其传递给函数的用户

const fetchData=()=>{
返回轴
.post(“/projects”{
项目名称,
项目描述,
项目预算,
项目持续时间,
工业,,
公司名称,
员工人数,
钻石,
})
。然后((结果)=>{
返回结果数据;
})
.catch((错误)=>{
日志(err.response.data);
});
};
然后最后是反应部分,您需要对功能组件进行和的讨论

constacomponent=()=>{
const[projects,setProjects]=useState();
useffect(()=>{
fetchData()。然后((响应)=>{
SET项目(响应);
});
},[]);//您需要定义依赖项
如果(!项目){
//显示加载消息,直到您获得数据
现在返回装载。。。;
}
返回(
{项目.建议}
{projects.projectsWithSameDiamond}
{projects.projectsWithSameIndustry}
);
};
关于异步存储,我不太熟悉。但我相信您可以将它与
fetchData()
函数集成为类似缓存层的功能

const cachedFetchData=async(…args)=>{
const storageKey=“@projects/”+projectName
//检查数据是否存储在异步存储上
const cached=AsyncStorage.getItem(storageKey)
如果(缓存){
返回JSON.parse(缓存)
}
//如果没有缓存,则从APIA获取数据
常量数据=等待获取数据(…参数)
//然后将数据存储在异步存储器上
AsyncStorage.setItem(storageKey、JSON.stringify(数据))
返回数据

你所说的“存储”数据是什么意思?你想将响应数据作为React组件的状态来呈现吗?是的!!!存储以便我也可以将其传递给不同的组件。是的,状态是一种方式,但目前我正在考虑React native中的
异步存储。