我的应用程序中有一条路由调用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);
});
};
};
答案 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);
});
};
};