更新数据库对象中的特定字段 | Axios、Redux 表单

Update specific field in database object | Axios, Redux forms

我有一个名为 item 的对象:

而且我还有一个 PUT 请求,可以更改 item 中的一些值。有些值在对象内部,有些则不是。一个例子是我需要能够更改 settings obj 中的值。目前我的 PUT 请求如下所示:

export function updateSettings(id, item) {
  return dispatch => {
    axios
      .put(`${settings.hostname}/cookie/${id}`, item)
      .then(res => {
        dispatch({
          type: 'COOKIES_UPDATED',
          payload: {
            item
          }
        })
      })
      .catch(err => console.log(err))
  }
}

并且在记录 res.data 时我只得到这个: _id: "598960d891202556389cxd"

后端处理 PUT 请求的方式如下:

r.put('/cookies' + '/:id', async (ctx, next) => {
  console.log(key)
  await ctx.db
    .replaceOne({ _id: objectId(ctx.params.id) }, ctx.request.body)

  ctx.body = { _id: ctx.params.id }
  console.log(ctx.request.body)
})

我正在使用 Redux 表单提交我的输入字段,我的 onSubmit 看起来像这样:

onSubmit={handleSubmit(props => {
  // props is the updated form values
  onSubmit(id, props)
})}

这会将新值发送到服务器并更新数据库,但它也会扰乱我的 item 对象的结构。一些字段正在被删除,所以我得到了使用 diff.Diff 的提示 (https://github.com/srcagency/object-diff) 目的是仅在服务器发生更改时发送,但就我而言,它没有更新任何东西。 Item 看起来完全一样。

所以这是我的问题,我不知道如何更新我的 item 对象中的特定字段。如果需要,我可以发送更多代码。

感谢阅读!

router.route('/cookies/:id')
.put(function(req, res) {

    Items.findById(req.params.id, function(err, item) {

        if (err)
            res.send(err);

        // if you want update all settings object
        item.settings = req.body;
        // if something on settings field, item.settings.field1 = req.body.field1
        item.save(function(err) {
            if (err)
                res.send(err);

            res.json({ message: 'Your item updated!' });
        });

    });
});