express et knex me battent un peu; Je ne peux pas faire fonctionner ce point de terminaison en utilisant req.querys (réponse de express), même si j'en ai créé un avec req.params et que tout allait bien.


Express:

app.get(`/actor`, async (req: Request, res: Response) => {
    try {
        // const { gender } = req.query;
        const count = await getActorsByGender(req.query.gender as string);

        console.log({ count });
        res.status(200).send({ quantity: count, });
    } catch (error) {
        res.status(200).send({ message: error.sqlMessage || error.message });
    }
});

Requête Knex:

const getActorsByGender = async (gender: string): Promise<any> => {
    try {
        const result = await connection.raw(`
            SELECT COUNT(*) as count FROM Actor
            WHERE gender = "${gender}"
        `);

        // console.log(`Temos: ${result[0][0].count} ocorrências`);
        return result;
    } catch (error) {
        console.log(error);
    }
};

C'est peut-être à cause du count(), mais je ne suis pas sûr. La partie knex est ok; Je peux console.log() le résultat. La partie express a montré un objet vide sur insomnia

Insomnia Page

En utilisant 'male' comme paramètre, il était censé renvoyer "2" comme résultat.

1
Gaspar 25 août 2020 à 18:03

2 réponses

Meilleure réponse

Votre envoi male en tant que un paramètre d'itinéraire / chemin depuis que vous utilisez http://localhost:3000/actor/male.

Si vous souhaitez y accéder en tant que paramètre de requête, vous pouvez laisser votre code tel quel, mais vous devez modifier votre URL de requête en http://localhost:3000/actor?gender=male

Notez que si vous vouliez définir gender comme paramètre de route, vous devrez changer votre gestionnaire de route en app.get("/actor/:gender") et y accéder en utilisant req.params.gender.

1
eol 26 août 2020 à 14:52

Vous utilisez path param dans insomnia, pas query param

Si vous souhaitez utiliser query params, vous devez supprimer /male de l'URL et ajouter query param key et value sous l'URL.

Vous pouvez également modifier l'URL en locahost:3000/actor?gender=male

1
Lioness100 26 août 2020 à 10:34