1
votes

Sqlite ne renvoie aucune donnée

J'essaie d'interroger une ligne spécifique mais tout est renvoyé. Je me suis assuré d'avoir des données.

J'utilise express.js et j'ai rédigé une requête dans laquelle j'envoie une valeur d'e-mail comme valeur de requête. Pour la requête SQL, lorsque je veux retourner toutes les lignes, cela fonctionne. Mais lorsque j'essaie d'interroger une ligne spécifique en utilisant la clause WHERE, rien ne retourne.

Tout d'abord, cela crée la table des utilisateurs:

GET http://localhost:3000/users/user?email="rr"

requête sql:

router.get('/user', function (req, res, next) {
    let userEmail = req.query.email;

    db.run(fetchUser, [userEmail], (err, user) => {
        if (err) return console.log(err.message);
        res.send(user)
    })
})

Voici la route:

const fetchUser = `SELECT rowid, * FROM users WHERE email = ?`;

Après avoir créé un utilisateur avec l'email "rr". Voici mon appel d'API:

const creatUsersTableStmt =
    `CREATE TABLE IF NOT EXISTS users (
                 firstName TEXT NOT NULL, 
                 lastName TEXT NOT NULL, 
                 email TEXT NOT NULL, 
                 phone TEXT NOT NULL,
                 UNIQUE(email)
     )`;

La réponse n'est pas définie.


0 commentaires

3 Réponses :


0
votes

Vous devez supprimer les guillemets doubles du paramètre de requête email :

http://localhost:3000/users/user?email=jon.skeet@google.com

Cela trouverait tous les enregistrements où l'e-mail littéral est rr code > (vous recherchiez "rr" ). Il est peu probable qu'il y ait de tels enregistrements. Si vous vouliez une autre adresse e-mail, utilisez quelque chose comme:

http://localhost:3000/users/user?email=rr


5 commentaires

Je viens de l'essayer et cela ne renvoie toujours rien.


Pouvez-vous vérifier que votre application Node peut effectivement recevoir correctement le paramètre de requête par e-mail?


Oui, je console, je l'ai déconnecté et il imprime l'e-mail correct.


Y a-t-il un message d'erreur dans err ? Je n'arrive pas à faire fonctionner correctement rowid , du moins pas sur SQLite 3.27 ( voir ici ).


Aucune erreur dans la console. rowid fonctionne pour moi car j'ai un autre appel api qui récupère toutes les lignes au lieu d'une ligne spécifique. J'utilise sqlite3 4.1.0



0
votes

utilisez plutôt ceci.

   router.get('/user', function (req, res, next) {
        let userEmail = req.query.email;

        db.run(fetchUser, [userEmail], function (err, user) => {
            if (err) return console.log(err.message);
            res.send(user)
        })
    })


1 commentaires

Je n'envoie pas d'identifiant comme chaîne de requête. J'envoie un e-mail car j'essaye d'obtenir l'identifiant, d'où le rowid



0
votes

J'ai travaillé, j'ai changé db.run en db.all.


0 commentaires