recherche

Maison  >  Questions et réponses  >  le corps du texte

Lance une nouvelle ResourceNotFoundError(id) pour un identifiant n inexistant

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粉060528326P粉060528326444 Il y a quelques jours638

répondre à tous(1)je répondrai

  • P粉071743732

    P粉0717437322023-09-14 15:36:55

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

    répondre
    0
  • Annulerrépondre