【问题标题】:express status code for incorrect username/password表示不正确的用户名/密码的状态码
【发布时间】:2018-09-13 10:44:47
【问题描述】:

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

【问题讨论】:

    标签: mongodb reactjs rest express


    【解决方案1】:

    您可以发送 400 或 401 状态代码并在 catch() 中获取数据,如下所示:

    catch(err => console.log(err.response.message))
    

    【讨论】:

    • 这正是我所需要的。我做了 console.log(err) 并没有看到响应对象或任何表明它附加了消息的东西。谢谢。
    【解决方案2】:

    其实你可以用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 中找到了这种方法。

    【讨论】:

    • 谢谢,我想到了这个,但是不正确的电子邮件和不正确的密码的状态码都是 401,所以我需要一种方法来根据具体情况发送消息。
    猜你喜欢
    • 2014-11-23
    • 2015-06-08
    • 1970-01-01
    • 2011-10-21
    • 2018-11-20
    • 2016-12-02
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    相关资源
    最近更新 更多