【问题标题】:DELETE request in reduxredux 中的 DELETE 请求
【发布时间】:2018-10-06 14:52:43
【问题描述】:

我正在使用 Node.js API 编写一个 React Redux CRUD 应用程序。我正在努力处理 DELETE 部分。 我收到了成功的删除消息,但我的数据库中没有任何变化。 Successful Message in Console

我只是想知道为什么它没有删除任何数据?

user.reducer:

import { userConstants } from '../_constants';

export function users(state = {}, action) {

  switch (action.type) {

    case userConstants.GETALL_REQUEST:
      return {
        loading: true
      };
    case userConstants.GETALL_SUCCESS:
      return {
        items: action.users
      };
    case userConstants.GETALL_FAILURE:
      return { 
        error: action.error
      };
    case userConstants.DELETE_REQUEST:
      // add 'deleting:true' property to user being deleted
      return {
        ...state,
        items: state.items.map(user =>
          user.id === action.id
            ? { ...user, deleting: true } 
            : user
        )
      };
    case userConstants.DELETE_SUCCESS:
      // remove deleted user from state
      return {
        items: state.items.filter(user => user.id !== action.id)
      };
    case userConstants.DELETE_FAILURE:
      // remove 'deleting:true' property and add 'deleteError:[error]' property to user 
      return {
        ...state,
        items: state.items.map(user => {
          if (user.id === action.id) {
            // make copy of user without 'deleting:true' property
            const { deleting, ...userCopy } = user;
            // return copy of user with 'deleteError:[error]' property
            return { ...userCopy, deleteError: action.error };
          }

          return user;
        })
      };
    default:
      return state
  }
}

user_actions:

export const userService = 
{
    delete: _delete,
};


function _delete(id) {

    const requestOptions = {
        method: 'DELETE',
        // headers: authHeader(),            
    };

    return fetch(`/removeadmin/${id}` , requestOptions).then(handleResponse);
}

AdminListPage 组件:

delete(){

this.props.dispatch(userActions.delete(this.state.delete_user._id));

}

另外,在服务器端,我收到了成功的删除状态

ServerSide Console(200)

服务器端路由器:

 app.delete('/removeadmin/:id', function(req, res)

{

        var sent_url = url.parse(req.url, true),
            qdata = sent_url.query, 
            sent_id = qdata.id;
        console.log('id ' + sent_id);

        admin.removeadmin(sent_id, function(err, user) {
            if (err)
                throw err;

        });

服务器端删除功能:

 module.exports.removeadmin = function(id, callback){
     var query = { _id: id };
     Admin.remove(query, callback);
    };

我在没有 redux 的组件中通过简单的 fetch 命令删除了一个用户,我在删除请求的正文中发送了 id,它正在工作,但 redux 只是成功的消息。

感谢您的帮助

【问题讨论】:

  • 为什么需要在 reducer 中删除操作?您的状态应该反映您的数据库。我没有得到我们上面的状态。不要手动从状态中删除数据,只需触发操作并在成功删除时从数据库中删除,返回所有用户,然后用新列表替换您的状态中的现有列表。这样做将确保您的状态完全反映您的数据库。我不明白你在上面做什么。最多简化您的状态,您只需要在 reducer 中执行 ADD_LIST 操作类型、IS_FETCHING、DID_INVALIDATED 等操作。
  • @NuruSalihu 我想通过 redux 进行删除。我已经按照一个例子这样做了。是的,你是对的,我不应该手动从状态中删除数据。在简单的获取中,我做到了,但没有使用 redux。谢谢
  • @AmrAly 不,两个不同的端口
  • @Nafis 你能在上面更新你的减速器,并留下失败的删除案例/操作吗?现在它漫长而令人困惑。只留下失败的代码。然后我们将查看状态动作。或者你能告诉我失败的动作类型是什么?
  • @NuruSalihu 谢谢Nuru,我已经添加了我的答案,它正在工作。但是如果告诉我为什么我不应该在 reducer 中删除,我会很高兴?

标签: node.js reactjs react-redux


【解决方案1】:

我发现我在 URL 中犯了一个错误。因此,在 URL 中的服务器上,我无法访问我的 id,它显示我未定义。

只是我改变了这些行: 用户操作:

return fetch(`/removeadmin?id=${id}` , requestOptions).then(handleResponse);

和服务器端路由器:

app.delete('/removeadmin?:id', function(req, res){

【讨论】:

    【解决方案2】:

    您在帖子中的代码应该可以工作,除了 fetch 请求,url 应该与后端 url 一起添加,所以如果后端 url 是 localhost:3000 您的 fetch 应该是:

    return fetch(`http://localhost:3000/removeadmin/${id}`, 
    requestOptions).then(handleResponse);
    

    在您的服务器端路由器中,您可以像这样访问您的 id 参数:

    app.delete('/removeadmin/:id', function(req, res)
    {
       var send_id = req.params.id;
        admin.removeadmin(sent_id, function(err, user) {
           if (err)
              throw err;
    });
    

    【讨论】:

    • 是的,这个对我来说现在也很好用。谢谢
    猜你喜欢
    • 2019-04-18
    • 2018-05-23
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    相关资源
    最近更新 更多