我需要使用MERN堆栈进行两个单独的模型调用。在res.json中发送对象工作,但数组给我带来麻烦。无法提取数据
控制台日志
{data: "[]", status: 200, statusText: "OK", headers: {…}, config: {…}, …}
后端router.get("/mySharedBooks", async (req, res) => { //when /mySharedBooks is requested this will be run
try{
const token = req.header("x-auth-token"); //grab token
if(!token) return res.json(false); //if no token, don't accept
const verified = jwt.verify(token, process.env.JWT_SECRET);
if(!verified) return res.json(false); //if not a real token, don't accept
const user = await User.findById(verified.id);
if(!user) return res.json(false); //if token doesn't match a user, don't accept
data = jwt.decode(token,process.env.JWT_SECRET); // verify & decode
const myBooks = await SharedBook.find({receiverID:data.id}).exec(); //grabs all sharedBooks for the currently logged in user by receiverID
//res.json(JSON.stringify(myBooks)) //sends back all sharedBooks records
let bookIDsArray = [];//blank array
for (const index in myBooks){
const books = await Book.find({bookID:myBooks[index].bookID}).exec(); //grab the book by the bookID we got from previous call
bookIDsArray.push(books); //add to array
}
res.json(JSON.stringify(bookIDsArray))
}catch(err){
res.status(500).json({error: err.message});
} //end try,catch
}); // end router.get("/mySharedBooks" //This route grabs the list of
books that have been shared with the currently logged in user (by receiverID)
前端
useEffect(() => {//when component renders run this
if (userData.userData.token) {
//console.log(userData.userData.token);
Axios.get("http://localhost:5001/sharedBooks/mySharedBooks", {//this is an axios get requires route and headers, Axios post require route, null, headers in that order
headers: {
"x-auth-token": userData.userData.token,
"Content-Type": "text/json",
},
}).then((data) => {//after something is returned, store in data
console.log(data);
失眠反应
"[[{"_id":"6037eba24aea43281c5b1036","bookID":"1","name":"Book 1","genreID":1,"rating":2,"price":8,"author":"nbm","synopsis":"synopsis","bookUrl":"https://svgsilh.com/svg_v2/146021.svg","__v":0}],[{"_id":"6037eba24aea43281c5b1036","bookID":"1","name":"Book 1","genreID":1,"rating":2,"price":8,"author":"nbm","synopsis":"synopsis","bookUrl":"https://svgsilh.com/svg_v2/146021.svg","__v":0}],[{"_id":"6037ebe64aea43281c5b1037","bookID":"2","name":"Book 2","genreID":1,"rating":2,"price":8,"author":"nbm","synopsis":"synopsis","bookUrl":"https://pngimg.com/uploads/number2/Number%202%20PNG%20images%20free%20download_PNG14925.png","__v":0}],[{"_id":"6037ebfa4aea43281c5b1038","bookID":"3","name":"Book 3","genreID":1,"rating":2,"price":8,"author":"nbm","synopsis":"synopsis","bookUrl":"https://blognumbers.files.wordpress.com/2010/09/3.jpg","__v":0}]]"
不发送数组的后端工作版本。
router.get("/getAllBooks", async (req, res) => { //when /getAllBooks is requested this will be run
try{
const token = req.header("x-auth-token"); //grab token
if(!token) return res.json(false); //if no token, don't accept
const verified = jwt.verify(token, process.env.JWT_SECRET);
if(!verified) return res.json(false); //if not a real token, don't accept
const user = await User.findById(verified.id);
if(!user) return res.json(false); //if token doesn't match a user, don't accept
const books = await Book.find({}).exec(); //grabs all book records
res.json(JSON.stringify(books)) //sends back all book records
}catch(err){
res.status(500).json({error: err.message});
} //end try,catch
}); // end router.get("/getAllBooks" //This route sends back all book records
data.data.bookIDsArray.forEach(element => {
bookNamesArray.push(element[0].name);//access data in parsed data via the index
bookAuthorsArray.push(element[0].author);//#3
bookRatingsArray.push(element[0].rating); bookPricesArray.push(element[0].price);
bookGenresArray.push(element[0].genreID); bookImgsArray.push(element[0].bookUrl);
// console.log(element[0])
});