首页 > 解决方案 > React POST 方法返回空数组而不是对象

问题描述

你好堆栈社区,

我有一种情况需要您的经验和观点。我正在尝试解决这个问题 2 天,但我无法完成。

当我尝试添加一个新对象(称为订阅)时,post 方法返回一个空数组而不是一个对象。我使用 MongoDB。以下是代码片段:

订阅模式:

import mongoose from 'mongoose';

const subscriptionSchema = new mongoose.Schema({
  name: { type: String, required: true },
  monthlyPrice: { type: Number, default: 0, required: true },
  yearlyPrice: {type: Number, default: 0, required: true},
  copyType: { type: String, required: true},
  seoType: { type: String, required: true},
  personalizationType: { type: String, required: true},
});

const subscriptionModel = mongoose.model('Subscription', subscriptionSchema);

export default subscriptionModel;

订阅路线:

router.get('/', async (req, res) => {
  const subscriptions = await Subscription.find({});
  res.send(subscriptions);
});

router.post('/', isAuth, isAdmin, async (req, res) => {
  const subscription = new Subscription({
    name: req.body.name,
    monthlyPrice: req.body.monthlyPrice,
    yearlyPrice: req.body.yearlyPrice,
    copyType: req.body.copyType,
    seoType: req.body.seoType,
    personalizationType: req.body.personalizationType
  });
  const newSubscription = await subscription.save();
  if (newSubscription) {
    return res
    .status(201)
    .send({ message: 'New Subscription created', data: newSubscription });
  }
  return res.status(500).send({message: 'Error on creating a new subscription'});
})

订阅操作:

const saveSubscription = (subscription) => async (dispatch, getState) => {
  try {
    dispatch({ type: SUBSCRIPTION_SAVE_REQUEST, payload: subscription });
    const { userSignIn: { userInfo }} = getState();
    if(!subscription._id) {
      const { data } = await Axios.get('/api/subscriptions', subscription, {
        headers: {
          Authorization: 'Bearer ' + userInfo.token,
        },
    });
    dispatch({ type: SUBSCRIPTION_SAVE_SUCCESS, payload: data})
    } else {
      const { data } = await Axios.put('/api/subscriptions/' + subscription._id, subscription, {
        headers: {
          Authorization: 'Bearer ' + userInfo.token,
        },
      });
      dispatch({ type: SUBSCRIPTION_SAVE_SUCCESS, payload: data});
    }
  } catch (error) {
    dispatch({ type: SUBSCRIPTION_SAVE_FAIL, payload: error.message});
  }
}

订阅减速器:

function subscriptionSaveReducer(state = { subscription: {} }, action ) {
  switch (action.type) {
    case SUBSCRIPTION_SAVE_REQUEST:
      return { loading: true };
    case SUBSCRIPTION_SAVE_SUCCESS:
      return { loading: false, subscription: action.payload, success: true };
    case SUBSCRIPTION_SAVE_FAIL:
      return { loading: false, error: action.payload };
    default:
      return state;
  }
}

如果您可以提供帮助,请查看并帮助我解决问题。

谢谢你。

标签: reactjspostget

解决方案


router.post('/', isAuth, isAdmin, async (req, res)

在这个特定的行中,尝试将帖子放在所有大写字母中,例如“POST”......这应该可以。如果其他地方有这样的行,请确保将帖子全部大写。


推荐阅读