簡體   English   中英

使用 axios 將數據推送到現有 object 中的數組

[英]Pushing data to an array in already existing object with axios

我有一個 object,它看起來像這樣:

 {
      "title": "675756",
      "release_date": "2022-01-16",
      "series": "Better Call Saul",
      "img": "https://upload.wikimedia.org/wikipedia/en/0/03/Walter_White_S5B.png", 
      "characters": [],
      "id": 1
    }

到一個characters數組,我想添加字符的id 我通過form來做,然后我像這樣handle submit

const handleSubmit = (values) => {
    console.log("dodano aktora do filmu!");
    console.log(values);
    addActorToMovie(values);

    history.goBack();
  };

addActorToMovie動作:

export const addActorToMovie = (resp) => ({
  type: types.ADD_CHAR_TO_MOVIE,
  payload: resp,
});

和減速機:

 case types.ADD_CHAR_TO_MOVIE:
      console.log(action.payload);
      return {
        ...state,
        ...state.episodes.map(function (item) {
          return item.id === action.payload.episodeId
            ? {
                id: item.id,
                title: item.title,
                release_date: item.release_date,
                series: item.series,
                img: item.img,
                characters: [...item.characters, action.payload.actor],
              }
            : { ...item };
        }),
      };

這一切都有效,但問題是我不想在當地做。 我使用帶有 json-server 的database ,我想做一個Axios Request ,以便它將數據添加到database中。 And i don't know how to do this, when i use axios.post it adds an object to my episodes array, if im using axios.put it changes an object. 是否有可能像我使用上面的代碼一樣將數據推送到數組,但是使用 axios 以便將其添加到database中?

我的方法是這樣的:

export const addActorToMovieAxios = (value) => {
  console.log(value);
  return async (dispatch) => {
    try {
      const response = await axios.post(
        `http://localhost:3000/episodes/`,
        value
      );
      console.log(response);
      dispatch(addActorToMovie(response.data));
    } catch (ex) {
      console.log(ex);
    }
  };
};

但正如我所說,這確實將新的 object 添加到數組中......

"episodes": [
    {
      "title": "675756",
      "release_date": "2022-01-16",
      "series": "Better Call Saul",
      "img": "https://upload.wikimedia.org/wikipedia/en/0/03/Walter_White_S5B.png",
      "characters": [],
      "id": 1
    },
    {
      "episodeId": 1,
      "actor": "1",
      "id": 2
    }
  ]

所以為了清楚我理解你的問題,你有一個 object 已經存在於你的數據庫中,你想在現有的 object 中將一些東西推送到“字符”數組上,而不創建新的 ZA8CFDE6331BD59EB2AC96F8911C4B66,對嗎?

為此,我將為您的數據庫使用 Mongo 並定義兩個 ZCCADCDEDB567ABAE643E15DCF0974E503Z 模式,一個用於現有的 object(我們稱之為 TVShow),另一個用於 object 中的字符。 您的兩個架構將如下所示:

TVShowModel.js:

 const mongoose = require('mongoose'); const CharacterModel = require('./CharacterModel') const TVShowScheme = new mongoose.Schema({ title: { type: String, }, release_date: { type: Date, }, series: { type: String, }, img: { type: String, }, characters:[ { type: mongoose.Schema.Types.ObjectId, ref: 'Student' }, ], examQuestions: [ { type: mongoose.Schema.Types.ObjectId, ref: 'CharacterModel' } ] }) module.exports = mongoose.model('TVShowModel', TVShowScheme )

CharacterModel.js:

 const mongoose = require('mongoose'); const CharacterModel= new mongoose.Schema({ characterName: { type: String, }, actorName: { type: String, }, }) // add any other fields you want here module.exports = mongoose.model('CharacterModel', CharactModelScheme )

然后,創建您的 Axios 發布請求。 確保在將“值”變量發送到服務器時發送,它包含您將“推送”到的 object 的 ID(或者可能是唯一標題)。 Push 在 axios/react 中不起作用,所以我們將使用 'spread' 運算符來代替。

您的路由器將如下所示:

 const CharacterModel= require ('../models/CharacterModel'); const TVShowModel= require ('../models/TVShowModel'); const router = express.Router(); router.post('/episodes', async function(req,res){ try{ const tvshow = await TVShowModel.find({title: req.body.title}) // edit as needed console.log("FOUND TV Show: "+tvshow ) const characterName= req.body.characterName const actorName = req.body.actorName const newCharacter = new CharacterModel({ characterName, actorName, }) console.log("new character created: "+newCharacter) tvshow[0].CharacterModel = [...tvshow[0].CharacterModel,newCharacter]; await tvshow[0].save().then(()=>res.json('New Character Added to DB')).catch(err=>res.status(400).json('Error: ' + err)) } catch(e){ console.log(e) } })

希望這很清楚!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM