表示错误用户名/密码的状态代码

时间:2018-04-04 01:32:24

标签: mongodb reactjs rest express

我正在制作一个休息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
        });
 }

2 个答案:

答案 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中找到了这种方法。