代码之家  ›  专栏  ›  技术社区  ›  Nafis

在redux中删除请求

  •  0
  • Nafis  · 技术社区  · 8 年前

    我正在用Node编写一个React-Redux-CRUD应用程序。js API。我正在与 删去 部分 我收到了成功的删除消息,但数据库中没有任何更改。 Successful Message in Console

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

    使用者减速器:

    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\u操作:

    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命令删除了一个用户,我在delete请求的主体中发送了id,它正在工作,但使用redux只是成功的消息。

    谢谢你的帮助

    2 回复  |  直到 8 年前
        1
  •  2
  •   Amr Aly    8 年前

    文章中的代码应该可以正常工作,但获取请求除外。url应该在后端url之前,因此如果后端url是 localhost:3000 您的回迁应该是:

    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;
    });
    
        2
  •  0
  •   Nafis    8 年前

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

    只是我更改了这些行: user\u操作:

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

    和服务器端路由器:

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