当调用客户端时,Mongoose方法findbyIdAndRemove失败

时间:2016-11-02 22:55:34

标签: javascript node.js mongoose

我的应用程序中有一条路由调用mongoose方法findByIdAndRemove。当我在邮递员中测试这条路线时,我可以成功删除数据库中的文件,但是当我从客户端的javascript文件中调用此方法时,我收到错误。

我得到了404(如果没有找到文件,我的指示响应状态)。我也在终端中收到一条错误,说'#34;发送后不能设置标题。"我不确定为什么我会收到此错误。为什么我的路线在邮递员工作,但是当我从客户端打电话时却没有?

我应该如何运作?

这是我在服务器端的路线:

exports.deleteEmployee = function (req, res, next) {
  const id = mongoose.Types.ObjectId(req.body.id);

      Employee.findByIdAndRemove(id, (err, employee) => {
          if (err) { return next(err); }

          // if no employee with the given ID is found throw 400
          if (!employee) { res.status(404).json('No employee with that ID'); }

          res.status(200).json(employee);
      });
    };

这是我从客户端调用此路由的地方:

export const employeeDelete = ({ id }) => {
  const props = { id };

  return () => {
    axios.delete(`${api.API_ROUTE}/employee/delete`, props)
      .then(() => {
        // push user back to EmployeeList and reset view stack
        Actions.employeeList({ type: 'reset' });
      })
      .catch(err => {
        console.log(err);
      });
  };
};

2 个答案:

答案 0 :(得分:0)

您收到“无法在发送后设置标头”。错误,因为您在使用400代码回复后尝试使用200代码进行响应。

您应该使用if / else语句包围响应语句:

if (!employee) { res.status(404).json('No employee with that ID'); }
else{res.status(200).json(employee);}

答案 1 :(得分:0)

事实证明axios删除方法不带数据对象,所以当我传递名为props的对象时,它从未到达过服务器。我转而将id作为url参数传递,如下所示:

export const employeeDelete = ({ id }) => {
  return () => {
    axios.delete(`${api.API_ROUTE}/employee/delete/${id})
      .then(() => {
        // push user back to EmployeeList and reset view stack
        Actions.employeeList({ type: 'reset' });
      })
      .catch(err => {
        console.log(err);
      });
  };
};