Lance une nouvelle ResourceNotFoundError(id) pour un identifiant n inexistant
P粉060528326
P粉060528326 2023-09-13 16:13:55
0
1
635

Je construis un petit système full-stack (typescript, express, NodeJs) et dans l'un des itinéraires, l'utilisateur peut demander des films en fonction du cinéma sélectionné, le service spécifique est le suivant :

async function getMoviesByTheatreId(theatreId : number) : Promise<MovieModel[]> {

    // SQL:
    const sql = 'SELECT * FROM movies where theatreId = ?;'

    // Call dal:
    const movies = await dal.execute(sql ,[theatreId]);

    // Return:
    return movies;
}

Clarification Il existe deux tables dans la base de données MYSQL : Théâtre et Films. Ils partagent une clé étrangère qui fait référence à la colonne « theatreId » de la table Theatres. La clé étrangère est une clé étrangère dans la table des films.

Maintenant, il est possible que l'utilisateur envoie un theatreId qui n'existe pas, auquel cas je souhaite lancer une nouvelle ResourceNotFoundError. Cependant, il est également possible que le theatreId existe, mais qu'il n'y ait tout simplement aucun film correspondant à ce cinéma. Dans ce cas, je ne veux pas générer cette erreur. Je veux également que ce soit bon en termes de performances, l'utilisation de plusieurs requêtes pour vérifier la base de données ralentira l'ensemble du processus.

P粉060528326
P粉060528326

répondre à tous(1)
P粉071743732

Tout d'abord, avant d'interroger la table Films, vérifiez si un cinéma avec le theatreId fourni existe dans la table Cinémas. Ensuite, vous pouvez interroger le film.

Voici l'exemple de code :

async function getMoviesByTheatreId(theatreId : number) : Promise<MovieModel[]> {

    const theatreSql = 'SELECT * FROM theatres WHERE theatreId = ?';
    const theatre = await dal.execute(theatreSql, [theatreId]);

    if (theatre.length === 0) {
        // throw new ResourceNotFoundError('Theatre not found');
    }

    // SQL to retrieve movies with provided theatreId:
    const moviesSql = 'SELECT * FROM movies WHERE theatreId = ?;'

    // Call dal:
    const movies = await dal.execute(moviesSql ,[theatreId]);

    // Return:
    return movies;
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal