我正在制作一个休息api,并且我知道错误的用户名或密码应返回状态代码401.问题是我无法在响应中使用此状态代码发送错误消息。
如果找不到用户,发送状态代码200是否有任何问题,以便我可以向前端发送消息:
User.findOne({ email: req.body.email }).then((user) => {
if (!user) {
res.status(200).json({ message: 'Username not found'});
return;
}
如果我发送400或401,那么如果我向路线发出axios请求,则拒绝承诺,我无法收到该消息。有没有办法返回状态代码400/401并返回json?我非常感谢任何帮助。这是我对路线的前端呼叫:
export const loginUser = ({ email, password}) =>
async (dispatch, getState) => {
const res = await axios.post(`/api/login`, {email, password}).catch(() => {
dispatch({ type: 'AUTH_ERROR', payload: res.data.message }) //error here because no res
});
dispatch({
type: 'USER_LOGIN',
payload: res.data._id
});
}
答案 0 :(得分:0)
您可以发送400或401状态代码并获取catch()的数据,如下所示:
catch(err => console.log(err.response.message))
答案 1 :(得分:0)
实际上,您可以发送包含 401 消息的消息
你可以试试这个:
User.findOne({ email: req.body.email }).then((user) => {
if (!user) {
res.status(401).send({ rtnCode: 1 });
return;
}
}
并处理响应错误我建议你这样做:
export const loginUser = ({ email, password }) =>
async (dispatch, getState) => {
try {
const res = await axios.post('/api/login', {email, password})
dispatch({ type: 'USER_LOGIN', payload: res.data._id })
} catch (error) {
if (error.response.status === 401) {
if (error.response.data.rtnCode === 1) {
console.log('Username not found!')
}
} else if (error.response.status === 400) {
// Bad request
} else {
// Something goes really wrong
}
}
}
要查看用户或护照是否有误,您可以使用rtnCode
。我在this page中找到了这种方法。