Node.js 服务器发送成功,即使未发送';我什么也找不到

Node.js 服务器发送成功,即使未发送';我什么也找不到,node.js,database,express,mongoose,Node.js,Database,Express,Mongoose,我将数据从输入字段发送到api: $.ajax({ url: '/api/login', type: 'GET', dataType: 'json', ContentType: 'application/json', data: {formData}, success: (data) => { console.log('SUCCESS') console.lo

我将数据从输入字段发送到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})
       } 
    })
在我的服务器端,我有一个函数,可以查看我是否在数据库中有所需的用户:

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中找不到用户,我还是会发送成功消息。为什么?

等待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)
  }
})

它之所以发送成功,是因为您的任何查询都没有出错,只是因为它没有找到任何内容,并不意味着查询失败,因为它显然成功地找到了您要查找的内容是否存在


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

当未找到任何用户时,您将获得一个
空值。您可以尝试在成功参数上添加更多逻辑,例如:

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

因为没有错误,所以只有在抛出错误时才会调用catch。我的function findUser抛出一个错误'User.findOne'如果没有找到相等的值,则返回一个空文档,因此虽然您的'findUser'可以抛出一个错误,但它不会抛出,因为它从未触发。感谢您的解释,我不知道这一点。