2017-10-21 90 views
1

j'envoyer des données de mes champs d'entrée à mon api:Server envoie le succès, même s'il n'a rien trouvé

$.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}) 
     } 
    }) 

sur mon côté serveur que j'ai une fonction pour voir si je suis utilisateur requis dans 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 
    } 
} 

qui sera exécuté ici:

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

Il fonctionne très bien, mais si un utilisateur n'a pas été trouvé dans db i envoie le succès de toute façon. enter image description here Pourquoi?

+0

parce qu'il n'y avait pas d'erreur, les captures n'est appelée lorsqu'une erreur est renvoyée – linasmnew

+0

mon fucntion findUser jette une erreur –

+0

« User.findOne » renvoie un document vide si aucun égal n'est trouvé, alors que votre 'findUser' peut lancer une erreur, car il ne se déclenche jamais. –

Répondre

2

await findUser(data.formData) ne renvoie pas d'erreur, renvoie null ou un objet utilisateur. Vous pouvez vérifier quelque chose suivante

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) 
    } 
}) 
+0

Votre façon de travailler! Je vous remercie! –

0

Il envoie succès parce qu'aucun de vos requêtes error'ed, juste parce qu'il n'a rien trouvé ne signifie pas que la requête a échoué parce qu'il a réussi à trouver de toute évidence si ce que jamais vous êtes à la recherche de existe ou non.

Pour envoyer une erreur en cas de non trouvé, vous devez vérifier si la réponse est vide dans ce cas, vous voulez envoyer erreur

0

Lorsque aucun utilisateur est de trouver que vous obtenez une valeur null. Vous pouvez essayer de mettre plus logique sur votre paramètre de succès que par exemple:

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