Javascript React/Redux/REST:发送数组

Javascript React/Redux/REST:发送数组,javascript,reactjs,rest,redux,axios,Javascript,Reactjs,Rest,Redux,Axios,我正在做一个MERN项目,我需要你的支持。通过提供数组的REST调用获取数据的最佳方法是什么 我有一个ID数组,希望使用axios和mongoose方法“findById”获取数据 我将数组作为参数从组件发送;调度调用函数fetchInvestineSid(favItin_id)的操作fetchInvestineSid,其中favItin_id是id的数组,并且减速机将有效负载添加到我的状态faviGeneraries:[] 代码如下: REST api调用: const express = r

我正在做一个MERN项目,我需要你的支持。通过提供数组的REST调用获取数据的最佳方法是什么

我有一个ID数组,希望使用axios和mongoose方法“findById”获取数据

我将数组作为参数从组件发送;调度调用函数fetchInvestineSid(favItin_id)的操作fetchInvestineSid,其中favItin_id是id的数组,并且减速机将有效负载添加到我的状态faviGeneraries:[]

代码如下:

REST api调用:

const express = require("express");
const router = express.Router();
const itineraryModel = require("../../models/itineraryModel");

//! GET FAV ITINERARIES //----------------------------------------------

//* @route   GET api/itineraries/:itin_id
//* @desc    Get itineraries per fav itin id
//* @access  Public
router.get("/itineraries/:favItin_id", (req, res) => {
  let itineraryRequestedId = req.params.favItin_id;
  itineraryModel
    .findById(itineraryRequestedId)
    .then(itinerary => {
      res.send(itinerary);
    })
    .catch(err => console.log(err));
});

module.exports = router;
import {
  FETCH_ITINERARIES_ID_PENDING,
  FETCH_ITINERARIES_ID_SUCCESS
} from "./typesActions";

//! FETCH FAVORITES BY USER ID //-------------------------------------------------------------

export function fetchItinerariesIdPending() {
  return {
    type: FETCH_ITINERARIES_ID_PENDING
  };
}

export const fetchItinerariesId = favItin_id => dispatch => {
  console.log("inside action fetchItineraries per fav ID");
  console.log(favItin_id);

  dispatch(fetchItinerariesIdPending());
  axios
    .get("/api/profile/itineraries", { favItin_id: favItin_id })
    .then(res => {
      dispatch({
        type: FETCH_ITINERARIES_ID_SUCCESS,
        payload: res.data
      });
    });
};
 /*----- MATERIAL UI -----*/
import Box from "@material-ui/core/Box";...

/*----- REACT/ROUTER/REDUX -----*/
import React, { Component, Fragment } from "react";
import { connect } from "react-redux"; // connect component to  redux store.

/*----- COMPONENTS/ACTIONS -----*/
import Navbar from "../components/Navbar";
import ItininerariesList from "../components/ItinerariesList";
import { loadUser } from "../store/actions/authActions";
import { fetchItinerariesId } from "../store/actions/profileActions";
import { fetchActivities } from "../store/actions/activitiesActions";

class Profile extends Component {
  componentDidMount() {
    this.props.loadUser();
    let favItin_id = this.props.favItin_id;
    this.props.fetchItinerariesId(favItin_id);
  }

  render() {
    const { favitineraries, activities } = this.props;

    return (
      <Fragment>
        <Container maxWidth="sm">
          <Typography component="div">
            <Box fontSize="h7.fontSize" textAlign="left" mb="3">
              Favorites MYtineraries:
            </Box>

            <ItininerariesList
            itineraries={favitineraries}
            activities={activities}
            />

          </Typography>
        </Container>

        <div className="navbar">
          <Navbar />
        </div>
      </Fragment>
    );
  }
}

const mapStateToProps = (state, ownProps) => {
  return {
    favItin_id: state.auth.user.favorites,
    favitineraries: state.profileRed.favItineraries,
    activities: state.activitiesRed.activities
  };
};

export default connect(mapStateToProps, {
  loadUser,
  fetchItinerariesId,
  fetchActivities
})(Profile);
重复操作:

const express = require("express");
const router = express.Router();
const itineraryModel = require("../../models/itineraryModel");

//! GET FAV ITINERARIES //----------------------------------------------

//* @route   GET api/itineraries/:itin_id
//* @desc    Get itineraries per fav itin id
//* @access  Public
router.get("/itineraries/:favItin_id", (req, res) => {
  let itineraryRequestedId = req.params.favItin_id;
  itineraryModel
    .findById(itineraryRequestedId)
    .then(itinerary => {
      res.send(itinerary);
    })
    .catch(err => console.log(err));
});

module.exports = router;
import {
  FETCH_ITINERARIES_ID_PENDING,
  FETCH_ITINERARIES_ID_SUCCESS
} from "./typesActions";

//! FETCH FAVORITES BY USER ID //-------------------------------------------------------------

export function fetchItinerariesIdPending() {
  return {
    type: FETCH_ITINERARIES_ID_PENDING
  };
}

export const fetchItinerariesId = favItin_id => dispatch => {
  console.log("inside action fetchItineraries per fav ID");
  console.log(favItin_id);

  dispatch(fetchItinerariesIdPending());
  axios
    .get("/api/profile/itineraries", { favItin_id: favItin_id })
    .then(res => {
      dispatch({
        type: FETCH_ITINERARIES_ID_SUCCESS,
        payload: res.data
      });
    });
};
 /*----- MATERIAL UI -----*/
import Box from "@material-ui/core/Box";...

/*----- REACT/ROUTER/REDUX -----*/
import React, { Component, Fragment } from "react";
import { connect } from "react-redux"; // connect component to  redux store.

/*----- COMPONENTS/ACTIONS -----*/
import Navbar from "../components/Navbar";
import ItininerariesList from "../components/ItinerariesList";
import { loadUser } from "../store/actions/authActions";
import { fetchItinerariesId } from "../store/actions/profileActions";
import { fetchActivities } from "../store/actions/activitiesActions";

class Profile extends Component {
  componentDidMount() {
    this.props.loadUser();
    let favItin_id = this.props.favItin_id;
    this.props.fetchItinerariesId(favItin_id);
  }

  render() {
    const { favitineraries, activities } = this.props;

    return (
      <Fragment>
        <Container maxWidth="sm">
          <Typography component="div">
            <Box fontSize="h7.fontSize" textAlign="left" mb="3">
              Favorites MYtineraries:
            </Box>

            <ItininerariesList
            itineraries={favitineraries}
            activities={activities}
            />

          </Typography>
        </Container>

        <div className="navbar">
          <Navbar />
        </div>
      </Fragment>
    );
  }
}

const mapStateToProps = (state, ownProps) => {
  return {
    favItin_id: state.auth.user.favorites,
    favitineraries: state.profileRed.favItineraries,
    activities: state.activitiesRed.activities
  };
};

export default connect(mapStateToProps, {
  loadUser,
  fetchItinerariesId,
  fetchActivities
})(Profile);
Redux减速机

  FETCH_ITINERARIES_ID_PENDING,
  FETCH_ITINERARIES_ID_SUCCESS
} from "../actions/typesActions";

const initialState = {
  pending: false,
  favItineraries: []
};

function profileReducer(state = initialState, action) {
  switch (action.type) {
    // GETS FAVORITES FROM ITINERARIES USING ITIN ID
    case FETCH_ITINERARIES_ID_PENDING:
      return {
        ...state,
        pending: true
      };

    case FETCH_ITINERARIES_ID_SUCCESS:
      return {
        ...state,
        pending: false,
        favItineraries: action.payload
      };

    default:
      return state;
  }
}

export default profileReducer;
反应视图组件:

const express = require("express");
const router = express.Router();
const itineraryModel = require("../../models/itineraryModel");

//! GET FAV ITINERARIES //----------------------------------------------

//* @route   GET api/itineraries/:itin_id
//* @desc    Get itineraries per fav itin id
//* @access  Public
router.get("/itineraries/:favItin_id", (req, res) => {
  let itineraryRequestedId = req.params.favItin_id;
  itineraryModel
    .findById(itineraryRequestedId)
    .then(itinerary => {
      res.send(itinerary);
    })
    .catch(err => console.log(err));
});

module.exports = router;
import {
  FETCH_ITINERARIES_ID_PENDING,
  FETCH_ITINERARIES_ID_SUCCESS
} from "./typesActions";

//! FETCH FAVORITES BY USER ID //-------------------------------------------------------------

export function fetchItinerariesIdPending() {
  return {
    type: FETCH_ITINERARIES_ID_PENDING
  };
}

export const fetchItinerariesId = favItin_id => dispatch => {
  console.log("inside action fetchItineraries per fav ID");
  console.log(favItin_id);

  dispatch(fetchItinerariesIdPending());
  axios
    .get("/api/profile/itineraries", { favItin_id: favItin_id })
    .then(res => {
      dispatch({
        type: FETCH_ITINERARIES_ID_SUCCESS,
        payload: res.data
      });
    });
};
 /*----- MATERIAL UI -----*/
import Box from "@material-ui/core/Box";...

/*----- REACT/ROUTER/REDUX -----*/
import React, { Component, Fragment } from "react";
import { connect } from "react-redux"; // connect component to  redux store.

/*----- COMPONENTS/ACTIONS -----*/
import Navbar from "../components/Navbar";
import ItininerariesList from "../components/ItinerariesList";
import { loadUser } from "../store/actions/authActions";
import { fetchItinerariesId } from "../store/actions/profileActions";
import { fetchActivities } from "../store/actions/activitiesActions";

class Profile extends Component {
  componentDidMount() {
    this.props.loadUser();
    let favItin_id = this.props.favItin_id;
    this.props.fetchItinerariesId(favItin_id);
  }

  render() {
    const { favitineraries, activities } = this.props;

    return (
      <Fragment>
        <Container maxWidth="sm">
          <Typography component="div">
            <Box fontSize="h7.fontSize" textAlign="left" mb="3">
              Favorites MYtineraries:
            </Box>

            <ItininerariesList
            itineraries={favitineraries}
            activities={activities}
            />

          </Typography>
        </Container>

        <div className="navbar">
          <Navbar />
        </div>
      </Fragment>
    );
  }
}

const mapStateToProps = (state, ownProps) => {
  return {
    favItin_id: state.auth.user.favorites,
    favitineraries: state.profileRed.favItineraries,
    activities: state.activitiesRed.activities
  };
};

export default connect(mapStateToProps, {
  loadUser,
  fetchItinerariesId,
  fetchActivities
})(Profile);
/*----物料界面-----*/
从“@material ui/core/Box”导入框;。。。
/*-----反应/路由器/重发-----*/
从“React”导入React,{Component,Fragment};
从“react redux”导入{connect};//将组件连接到redux存储。
/*-----组成部分/行动-----*/
从“./components/Navbar”导入导航栏;
从“./组件/行程列表”导入ITInnerAriesList;
从“./store/actions/authActions”导入{loadUser};
从“./store/actions/profileActions”导入{fetchInvestrieSID};
从“./store/actions/activitiesActions”导入{fetchActivities};
类概要文件扩展了组件{
componentDidMount(){
this.props.loadUser();
让favItin_id=this.props.favItin_id;
this.props.fetchInvestriesid(favItin_id);
}
render(){
const{favitineraries,activities}=this.props;
返回(
最喜欢的散瞳:
);
}
}
const mapStateToProps=(state,ownProps)=>{
返回{
favItin_id:state.auth.user.favorites,
favigeneraries:state.profileRed.favigeneraries,
活动:state.activitiesRed.activities
};
};
导出默认连接(MapStateTops{
loadUser,
我的朋友希德,
获取活动
})(概况);

如有任何建议或指导,将不胜感激。提前谢谢。

您编写了很多代码,但没有很好地解释您想要做什么。您需要做的就是向mongoose发送一个对象数组并检索对象列表?-顺便说一下,在js中,数组也是一个对象,这里是一种使用$inthank youssef查找多个ID的方法!mongoose方法$in解决了我的问题。你写了很多代码,但没有很好地解释你想要做什么。你需要做的是向mongoose发送一个对象数组并检索一个对象列表?-顺便说一下,在js中数组也是一个对象,这里是一种使用$inthank youssef查找多个ID的方法!mongoose方法$in解决了我的问题。