【问题标题】:Server sends success even if didn't find anything即使没有找到任何东西,服务器也会发送成功
【发布时间】:2018-04-02 12:14:01
【问题描述】:

我将输入字段中的数据发送到我的 api:

  $.ajax({
       url: '/api/login',
       type: 'GET',  
       dataType: 'json',  
       ContentType: 'application/json',
       data: {formData},
       success: (data) => {
         console.log('SUCCESS')
         console.log(data)
         this.setState({
           isInProcess: false
         })
       },  
       error: (jqXHR) => {
         console.log(jqXHR)
         console.log('ERROR')
         this.setState({isInProcess: false})
       } 
    })

在我的服务器端,我有一个函数来查看我是否在 db 中需要用户:

async function findUser(data) {
  try {
    const user = await User.findOne({email: data.email,
                                     password: data.password})
    console.log('User was found')
    return { user }
  } catch (err) {
    console.log('error', err)
    throw err
  }
}

将在此处执行:

app.get('/api/login', async (req, res) => {
  const data = req.query
  try {
    const foundUserData = await findUser(data.formData)
    return res.json(foundUserData)
  } catch (err) {
    return res.status(400).json(err)
  }
})

它工作正常,但如果在 db 中找不到用户,我还是会发送成功。 为什么?

【问题讨论】:

  • 因为没有错误,所以只有在抛出错误时才会调用catch
  • 我的函数 findUser 抛出错误
  • 'User.findOne' 如果没有找到相等的,则返回一个空文档,所以虽然你的 'findUser' 可能会抛出错误,但它不会因为它永远不会触发。
  • 谢谢你的解释,不知道。

标签: node.js database express mongoose


【解决方案1】:

await findUser(data.formData) 不会抛出错误,返回null 或用户对象。您可以检查以下内容

app.get('/api/login', async (req, res) => {
  const data = req.query
  try {
    const foundUserData = await findUser(data.formData)
    if(foundUserData && foundUserData.user) {
      return res.json(foundUserData)
    } else {
      return res.status(400).json({message: 'User not found'});
    }
  } catch (err) {
    return res.status(500).json(err)
  }
})

【讨论】:

    【解决方案2】:

    它发送成功是因为您的任何查询都没有出错,只是因为它没有找到任何东西并不意味着查询失败,因为它显然成功地找出了您正在寻找的东西是否存在。

    要在未找到的情况下发送错误,您需要检查响应是否为空,在这种情况下您要发送错误

    【讨论】:

      【解决方案3】:

      当没有找到用户时,你会得到一个null 值。您可以尝试将更多逻辑放在您的成功参数上,例如:

      success: function (data) {
          if(!!data && data != null) {
              alert('Success');
          } else {
              alert('No data');
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多