Reactjs 将数组从React发送到Express/Node到query Mongo
我很难从React state通过Node/Express发送一组Id号,然后最终发送到MongoDB 主要的困难是如何将数组从React发送到服务器。一旦以可用数组的形式存在,我相信我知道如何使用数组查询MongoDB 我一直在尝试使用GET方法来实现这一点,但使用req.params或req.query失败。我已经尝试了几个版本的字符串模板,并且使用Axios文档所说的以及许多其他关于堆栈溢出的答案,没有一个是成功的 我还尝试了几个版本的PUT请求,但也没有成功 props.completedJobs中已存在ID数组: 在反应中:Reactjs 将数组从React发送到Express/Node到query Mongo,reactjs,mongodb,express,Reactjs,Mongodb,Express,我很难从React state通过Node/Express发送一组Id号,然后最终发送到MongoDB 主要的困难是如何将数组从React发送到服务器。一旦以可用数组的形式存在,我相信我知道如何使用数组查询MongoDB 我一直在尝试使用GET方法来实现这一点,但使用req.params或req.query失败。我已经尝试了几个版本的字符串模板,并且使用Axios文档所说的以及许多其他关于堆栈溢出的答案,没有一个是成功的 我还尝试了几个版本的PUT请求,但也没有成功 props.complete
useEffect(() => {
const fetchData = async () => {
let completedJobsArray = props.completedJobs;
let json = JSON.stringify(data);
let getData = {jsonData: json};
const result = await axios('/api/brief/brief-array/' + getData);
setData(result.data);
};
fetchData();
}, []);
在Express应用程序中:
app.use("/brief", briefRouter);
然后在路由器中:
router.get("/brief-array/:briefArray", briefController.brief_findArrayById);
然后函数:
exports.brief_findArrayById = async (req, res) => {
try {
// console.log("req.body: ", req.body);
// console.log("req: ", req);
// console.log("req.query: ", req.query);
// console.log("req.params: ", JSON.stringify(req.params.briefArray));
const briefs = await GWJob.find({"_id": {$in: ["5d1297512c68bc49060bce7b", "5d1297092c68bc49060bce7a"] } });
res.json(briefs);
} catch (err) {
res.json({ message: err });
}
}
MongoDB查询使用硬编码的ID,但无法使上述任何版本的console.logs显示除未定义或“object”之外的任何值
我也无法通过Postman使用数组查询数据库
我希望在一个数组中向MongoDB发送1个或多个id号,然后接收这些文档,以便在前端做出反应。非常感谢您通过Node/Express从React中的状态发送数组的任何帮助!谢谢。您正在通过URL发送长度有限的长字符串(~2047个字符), 使用post或put方法并在
正文
中发送列表,可以安全地完成您要做的事情
例如:
useffect(()=>{
const fetchData=async()=>{
让completedJobsArray=props.completedJobs;
常量结果=等待axios({
方法:“post”,
url:“/简短数组”,
数据:completedJobsArray
});
setData(result.data);
};
fetchData();
}, []);
另一次尝试,仍然返回未定义。如果任何人有发送/接收数据的完整资源链接,我将不胜感激。在我开始使用Axios之前,我一直花了好几天的时间试图让其中一个正常工作,但如果我需要超越Axios的能力,我会回到原点。非常感谢
useEffect(() => {
const fetchData = async () => {
let completedJobsArray = props.completedJobs;
let queryData = {completedJobsArray};
const settings = {
method: 'POST',
headers: { 'Content-Type': 'application/json; charset=utf-8'},
body: JSON.stringify(queryData)
};
try {
const fetchResponse = await fetch(`/api/brief/brief-array`, settings);
const returnedData = await fetchResponse.json();
setData(returnedData);
} catch (error) {
console.error("error: ", error);
}
}
fetchData();
}, []);
您使用的是bodyparser还是cookieparser?当前使用extended:truen编码的bodyparser.url我确信这都是您的请求,对axios不太熟悉,但我认为您需要对json进行字符串化或将其作为对象发送,但我不确定您是如何处理api路由的,您是否尝试过:``axios('/api/brief/brief array',getData);?谢谢,是的,我相信我已经像上面那样尝试过stringify和axios('/api/brief/brief-array',getData)。axios文档在这方面似乎不完整。如果您知道如何发送数组,我很乐意使用另一种方法。我只是想提供帮助,但不幸的是,我总是这样使用“fetch”:
fetch(url,{headers:{'Content Type':'application/json;charset=utf-8'},method:'POST',body:json.stringify({data,})
我认为这是一种快速的测试方法!谢谢,如果我这样做的话,控制台日志显示req.data是未定义的,req.body是空的{}。如果我将数据更改为body,则相同:这是代码:``useffect(()=>{const fetchData=async()=>{let completedJobsArray=props.completedJobs;const result=wait axios({method:'POST',url:'/api/brief/brief array',data:completedJobsArray});setData(result.data);};fetchData();},[])```