Node.js 服务器发送成功,即使未发送';我什么也找不到
我将数据从输入字段发送到api: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
$.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'可以抛出一个错误,但它不会抛出,因为它从未触发。感谢您的解释,我不知道这一点。